我希望在将其发送到客户端之前从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>
答案 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()
。