2014-02-22 68 views
4

我正在阅读XDocument。我如何从XDocument中删除所有注释行。删除所有来自XDocument的评论

我试图与

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

但这仅删除第一级节点意见和内部级节点保持原样。

有什么办法可以删除所有注释行。我相信一定有! ;)

任何解决方案。

+0

试着做'递归'。 – Iqbal

+0

是不是有任何解决方法与单个查询? –

回答

9

取而代之的是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> 

因此所有评论已被删除。如果你仍然有问题,然后张贴样本,让我们重现这个问题。

+0

以后会保重thanx –