如何从XElement中删除XComments?

时间:2013-02-05 14:13:16

标签: c# linq-to-xml

我希望在将其发送到客户端之前从XElement中删除所有XComment。

由于某些原因它不起作用而且removeMe.Count()= 0

有什么想法吗?

{

   // ...

   myXml = XElement.Load(myPath);
   var removeMe=myXml.Descendants().Where(x => x.NodeType == XmlNodeType.Comment);
   removeMe.Count();        // this is 0 , (not what i was expected)
   removeMe.Remove();

   //...

   string myResponseStr = myXml.ToString(SaveOptions.None);
   context.Response.ContentType = "text/plain";
   context.Response.Write(myResponseStr);
 }

xml文件可能就像那样

 <user>   
    <name> Elen </name>

    <userSettings>
       <color> blue  </color>                <!-- the theme color of the page -->
       <layout>  horizontal  </layout>      <!-- layout choise -->

       <!-- more settings -->

     </userSettings>

 </user>

2 个答案:

答案 0 :(得分:10)

您需要使用DescendantNodes代替Descendants

Descendants返回XElement个实例,因此它基本上只返回XML的标记 DescendantNodes返回XNode个实例,其中包含评论。

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

答案 1 :(得分:8)

我也会使用DescendantNodes但是Where调用它就足以使用OfType<XComment>(),即doc.DescendantNodes().OfType<XComment>().Remove()