6 Stimmen

Einen kommentierten Knoten in einer XML-Datei mit C# auskommentieren

Ich habe eine XML-Datei, die einen Knoten enthält, der auskommentiert ist. Ich habe diesen Knoten mit der folgenden Syntax erstellt:

relTableCommentedNode = xDoc.CreateNode(XmlNodeType.Comment, "RELTABLECOMMENTED", "np");

Wie kann ich diesen Knoten am besten auskommentieren? Kann ich diesen Knoten anhand des Namens identifizieren, den ich zum Erstellen des Knotens verwendet habe ( RELTABLECOMMENTED )?

Dies ist der kommentierte Knoten:

<code>
<pre> 
<!--<reltable toc="no" class="- map/reltable ">
    <relheader class="- map/relheader ">
      <relcolspec type="concept" class="- map/relcolspec ">      
    </relheader>
    <relrow class="- map/relrow ">
      <relcell class="- map/relcell ">
        <topicref href="concepts\about_cannedgoods.dita" copy-to="concepts\about_cannedgoods.dita" class="- map/topicref " xmlns:dctm="http://www.documentum.com">
        </topicref>
      </relcell>      
    </relrow>
  </reltable> -->
</pre>
</code>

9voto

Chris Taylor Punkte 50950

Soweit ich weiß, gibt es mit XmlDocument keine direkte Möglichkeit, dies zu tun. Sie müssen etwas wie das Folgende tun

  1. Den Wert des Kommentarknotens abrufen
  2. Erstellen Sie einen neuen XmlNode mit dem Wert aus Schritt 1
  3. Löschen Sie den Kommentar-Knoten
  4. Fügen Sie den neuen Knoten aus Schritt 2 zum DOM-Baum hinzu

Hier ist ein Beispiel mit einer leicht vereinfachten Version Ihrer XML-Datei und einer Antwort auf Ihre Frage in den Kommentaren, wie man den richtigen Kommentar-Knoten findet. Beachten Sie, dass ich alle Kommentar-Knoten abfrage. Natürlich können Sie spezifischer sein und den Teil des Dokuments abfragen, an dem Sie interessiert sind.

  string xml = @"
    <root>
      <!--<reltable toc='no' class='- map/reltable '>
      <relheader class='- map/relheader '>
        <relcolspec type='concept' class='- map/relcolspec '/>      
      </relheader>         
    </reltable> -->

    <!--<reltable toc='no' class='- map '>
      <relheader class='- map/relheader '>
        <relcolspec type='concept' class='- map/relcolspec '/>      
      </relheader>          
    </reltable> -->
  </root>";

  XmlDocument xdoc = new XmlDocument();
  xdoc.LoadXml(xml);

  XmlNodeList commentedNodes = xdoc.SelectNodes("//comment()");
  var commentNode = (from comment in commentedNodes.Cast<XmlNode>()
              where comment.Value.Contains("class='- map '")
              select comment).FirstOrDefault();

  if (commentNode != null)
  {
    XmlReader nodeReader = XmlReader.Create(new StringReader(commentNode.Value));
    XmlNode newNode = xdoc.ReadNode(nodeReader);
    commentNode.ParentNode.ReplaceChild(newNode, commentNode);
  }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X