我正在阅读XDocument。如何从XDocument中删除所有注释行。
我试过
doc.DescendantNodes().Where(x => x.NodeType == XmlNodeType.Comment).Remove();
但是这只删除了带注释的第一级节点,内层节点保持不变。
有没有办法删除所有注释行。我相信一定有!!! ;)
任何解决方案。
答案 0 :(得分:10)
而不是Where(x => x.NodeType == XmlNodeType.Comment)
,我只需使用OfType<XComment>()
,就像在
doc.DescendantNodes().OfType<XComment>().Remove();
但两种方法都应删除所有级别的评论节点。
以下是一个例子:
XDocument doc = XDocument.Load("../../XMLFile1.xml");
doc.Save(Console.Out);
Console.WriteLine();
doc.DescendantNodes().OfType<XComment>().Remove();
doc.Save(Console.Out);
对于样本,我得到了输出
<?xml version="1.0" encoding="ibm850"?>
<!-- comment 1 -->
<root>
<!-- comment 2 -->
<foo>
<!-- comment 3 -->
<bar>foobar</bar>
</foo>
<!-- comment 4 -->
</root>
<!-- comment 5 -->
<?xml version="1.0" encoding="ibm850"?>
<root>
<foo>
<bar>foobar</bar>
</foo>
</root>
因此所有评论都已删除。如果您仍然遇到问题,请发布样本,以便我们重现问题。