2009-12-09 7 views

Antwort

28

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.

4

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); 
0

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.