【问题标题】:Remove all comments from XDocument从 XDocument 中删除所有注释
【发布时间】:2014-02-22 10:03:27
【问题描述】:

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

我试过了

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

但这只会删除带有 cmets 的第一级节点,而内级节点保持原样。

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

任何解决方案。

【问题讨论】:

  • 尝试做recursive
  • 单查询没有解决办法吗?

标签: c#-4.0 linq-to-xml


【解决方案1】:

我会简单地使用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>

所以所有的 cmets 都被删除了。如果您仍然遇到问题,请发布示例以便我们重现问题。

【讨论】:

  • 以后会多多关照的
猜你喜欢
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2019-07-04
  • 2016-03-05
  • 2012-06-07
  • 1970-01-01
相关资源
最近更新 更多