2013-02-05 70 views
6

我希望在將它發送給客戶端之前從XElement中刪除所有的XComment。如何從XElement中刪除XComments?

從某種原因,它不能正常工作和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> 

回答

9

您需要使用DescendantNodes而不是Descendants

Descendants返回XElement實例,所以它基本上只返回XML的標籤。
DescendantNodes返回XNode個實例,其中包含註釋。

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

謝謝。像魅力一樣工作... –

6

我也將使用DescendantNodes但代替Where調用它足以使用OfType<XComment>()doc.DescendantNodes().OfType<XComment>().Remove()

+0

謝謝你的額外提示。 –