我有一个XML文件
<rows>
<head>
<beforeInit>
<call command="attachHeader">
<param>#text_filter,#text_filter,#text_filter,#text_filter,#text_filter,#text_filter</param>
</call>
</beforeInit>
<afterInit>
<call command="enablePaging">
<param>recinfoArea</param>
</call>
</afterInit>
<column width="100" align="center" type="ro" sort="server" color="undefined" id="Id">Id</column>
<column width="100" align="center" type="ro" sort="server" color="undefined" id="NazovProjektu">NazovProjektu</column>
</head>
</rows>
我想删除beforeInit和afterInit元素。
我试过
xml.Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove();
但没有运气。
答案 0 :(得分:15)
如果要删除beforeInit或afterInit的每个出现,可以使用
xml.Descendants().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove();
(后代而不是元素)。 elements()返回直接子节点的列表,而后代返回每个节点。
答案 1 :(得分:2)
如果xml是XElement,请尝试:
xml.Element("head").Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove();
否则,如果它是XDocument:
xml.Root.Element("head").Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove();
现在的方式是,它设置为在<rows>
中查找子元素,而不是<head>
。换句话说,Elements()仅返回节点的直接子节点。如果你想要所有的后代,无论在什么级别,你都想要后代()。