如何从XElement中删除XComments?

7
我希望在将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个回答

10
你需要使用 DescendantNodes 替代 DescendantsDescendants 返回 XElement 实例,因此它基本上只返回你的 XML 标签。 DescendantNodes 返回 XNode 实例,其中包括注释。
doc.DescendantNodes().Where(x => x.NodeType == XmlNodeType.Comment).Remove();

9

我会使用DescendantNodes,但不需要Where。只需使用OfType<XComment>(),即doc.DescendantNodes().OfType<XComment>().Remove()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接