如何从XElement中删除XComments?

yoa*_*nea 7 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);
 }
Run Code Online (Sandbox Code Playgroud)

xml文件可以是这样的

 <user>   
    <name> Elen </name>

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

       <!-- more settings -->

     </userSettings>

 </user>
Run Code Online (Sandbox Code Playgroud)

Dan*_*rth 10

你需要使用DescendantNodes而不是Descendants.

Descendants返回XElement实例,因此它基本上只返回XML的标记.
DescendantNodes返回XNode包含注释的实例.

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


Mar*_*nen 9

我也会使用DescendantNodes而不是Where调用它就足以使用OfType<XComment>()ie doc.DescendantNodes().OfType<XComment>().Remove().