Wie würde ich alle Kommentar-Tags aus einer XmlDocument-Instanz entfernen?So entfernen Sie alle Kommentar-Tags aus XmlDocument
Gibt es einen besseren Weg, als eine XmlNodeList abzurufen und über diese zu iterieren?
Wie würde ich alle Kommentar-Tags aus einer XmlDocument-Instanz entfernen?So entfernen Sie alle Kommentar-Tags aus XmlDocument
Gibt es einen besseren Weg, als eine XmlNodeList abzurufen und über diese zu iterieren?
Wenn Sie die XML laden Sie XmlReaderSettings
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("...", settings);
xmlDoc.Load(reader);
Auf einer vorhandenen Instanz sieht Ihre Lösung gut nutzen können.
Nein, das ist es, obwohl ich würde zuerst die Knoten in einer Liste platzieren.
Ich bin mir nicht sicher über die .NET-Implementierung von XmlNodeList
, aber ich weiß, dass frühere MSXML-Implementierungen die Liste in fauler Weise geladen und Code wie die oben in der Vergangenheit am Ende irgendwie als Ergebnis des DOM fehlschlagen würde Baum wird geändert, während die Liste aufgelistet ist.
foreach (var node in xml.SelectNodes("//comment()").ToList())
node.ParentNode.RemoveChild(node);
heute für den Weg suchen, wie für Anwendungen (nicht C#) <!-- -->
von Visual Basic zu extrahieren, ich habe auch nodeTypeString Eigenschaft gefunden, aber es mehr Platz in Anspruch nimmt. Hier ist ein Beispiel in VBA:
Dim xmldoc As New MSXML2.DOMDocument30
Dim oNodeList As IXMLDOMSelection
Dim node As IXMLDOMNode
Dim i As Long
Dim FileName As String, FileName1 As String
FileName = "..." ' Source
FileName2 = "..." ' Target
xmldoc.async = False ' ?
xmldoc.Load FileName
If (xmldoc.parseError.errorCode <> 0) Then Exit Sub ' or Function
Set oNodeList = xmldoc.selectNodes("//*") '' all nodes
For i = 0 To oNodeList.length - 1
With oNodeList(i)
For Each node In .childNodes
If node.nodeTypeString = "comment" Then .removeChild node
Next
End With
Next
xmldoc.Save FileName2
Set oNodeList = Nothing ' ?
Set xmldoc = Nothing
Es omitts Top-Mutter Kommentar Knoten dokumentieren, aber sie können irgendwie direkt abgerufen werden, wenn nötig, zum Beispiel With xmldoc.documentElement.childNodes
verwenden.
Scheint gut für mich. – Dave