从XDocument中移除所有注释

10

我正在阅读XDocument。如何从XDocument中删除所有注释行?

我尝试过以下方法:

 doc.DescendantNodes().Where(x => x.NodeType == XmlNodeType.Comment).Remove();

但是这只删除了带有注释的第一级节点,内部级别节点保持不变。

是否有任何方法可以删除所有的注释行。我相信一定有!;)

任何解决方案。


尝试使用“递归”实现。 - Iqbal
有没有什么单个查询的解决方法? - Nitin Varpe
1个回答

20

我会简单地使用 OfType<XComment>(),而不是 Where(x => x.NodeType == XmlNodeType.Comment)

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>

所有评论都已被删除。如果您继续遇到问题,请发布示例,使我们能够复制问题。


将来会注意的,谢谢。 - Nitin Varpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接