从XDocument中删除所有注释

Nit*_*rpe 6 linq-to-xml c#-4.0

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

我试过了

 doc.DescendantNodes().Where(x => x.NodeType == XmlNodeType.Comment).Remove();
Run Code Online (Sandbox Code Playgroud)

但是这只删除了带注释的第一级节点,并且内层节点保持不变.

有没有办法删除所有注释行.我相信一定有!!! ;)

任何解决方案

Mar*_*nen 11

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

doc.DescendantNodes().OfType<XComment>().Remove();
Run Code Online (Sandbox Code Playgroud)

但是这两种方法都应该删除所有级别的注释节点.

这是一个例子:

XDocument doc = XDocument.Load("../../XMLFile1.xml");

doc.Save(Console.Out);

Console.WriteLine();

doc.DescendantNodes().OfType<XComment>().Remove();

doc.Save(Console.Out);
Run Code Online (Sandbox Code Playgroud)

对于样本,我得到了输出

<?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>
Run Code Online (Sandbox Code Playgroud)

所以所有评论都已删除.如果您仍然遇到问题,请发布样本,以便我们重现问题.