2009-12-09 76 views
17

我将如何去除一个XmlDocument实例中的所有评论标签?如何从XmlDocument中删除所有评论标签

是否有比检索XmlNodeList和迭代这些更好的方法?


    XmlNodeList list = xmlDoc.SelectNodes("//comment()"); 

    foreach(XmlNode node in list) 
    { 
     node.ParentNode.RemoveChild(node); 
    } 
+0

对我来说似乎很好。 – Dave 2009-12-09 14:15:34

回答

28

当您加载XML,可以使用XmlReaderSettings

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.IgnoreComments = true; 
XmlReader reader = XmlReader.Create("...", settings); 
xmlDoc.Load(reader); 

在现有的情况下,您的解决方案看起来不错。

4

没有这个关于它,虽然我会倾向于将节点放在列表中的第一个。

我不知道有关的XmlNodeList的.NET实现,但我知道,以前的MSXML实现加载懒惰的方式和代码列表,如上述,在过去最终会以某种方式失败的DOM的结果列表被枚举时树被修改。

foreach (var node in xml.SelectNodes("//comment()").ToList()) 
    node.ParentNode.RemoveChild(node); 
0

今天想找的方法是从Visual Basic for Applications(而不是C#)中提取<!-- -->,我发现还有nodeTypeString属性,但是它占用了更多的空间。下面是在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 

它omitts文档顶部父注释节点,但他们可以以某种方式直接在需要时使用With xmldoc.documentElement.childNodes进行检索,例如。

相关问题