我将如何去除一个XmlDocument实例中的所有评论标签?如何从XmlDocument中删除所有评论标签
是否有比检索XmlNodeList和迭代这些更好的方法?
XmlNodeList list = xmlDoc.SelectNodes("//comment()");
foreach(XmlNode node in list)
{
node.ParentNode.RemoveChild(node);
}
我将如何去除一个XmlDocument实例中的所有评论标签?如何从XmlDocument中删除所有评论标签
是否有比检索XmlNodeList和迭代这些更好的方法?
XmlNodeList list = xmlDoc.SelectNodes("//comment()");
foreach(XmlNode node in list)
{
node.ParentNode.RemoveChild(node);
}
当您加载XML,可以使用XmlReaderSettings
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("...", settings);
xmlDoc.Load(reader);
在现有的情况下,您的解决方案看起来不错。
没有这个关于它,虽然我会倾向于将节点放在列表中的第一个。
我不知道有关的XmlNodeList
的.NET实现,但我知道,以前的MSXML实现加载懒惰的方式和代码列表,如上述,在过去最终会以某种方式失败的DOM的结果列表被枚举时树被修改。
foreach (var node in xml.SelectNodes("//comment()").ToList())
node.ParentNode.RemoveChild(node);
今天想找的方法是从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
进行检索,例如。
对我来说似乎很好。 – Dave 2009-12-09 14:15:34