我需要帮助来根据某些条件删除xml节点
这是我的xml
<result> <product> <auto> <report> <auto> <admin></admin> <report> <search> <subjects> <subject> <name> <first>John</first> <last>D</last> </name> </subject> </subjects> </search> </report> </auto> </report> </auto> <auto> <report> <auto> <admin></admin> <report> <search> <subjects> <subject> <name> <first>Jack</first> <last>L</last> </name> </subject> </subjects> </search> </report> </auto> </report> </auto> </product> </result>
在这个xml之外,根据名字和姓氏删除其余的&#34; auto&#34;节点
保持&#34;自动&#34;节点如果名字=约翰和姓氏= D
预期xml:
<result> <product> <auto> <report> <auto> <admin></admin> <report> <search> <subjects> <subject> <name> <first>John</first> <last>D</last> </name> </subject> </subjects> </search> </report> </auto> </report> </auto> </product> </result>
我想先通过
提取所需的内容var query = from p in XDocument.Parse(myXml).Root.Elements ("result/product/auto/report/auto/report/search/subjects/subject/name") where ( from c in p.Elements("first") where c.Value == "John" select c ).Any() select p;
请在这里建议我。
答案 0 :(得分:2)
如果我理解正确的话:
string first = "John";
string last = "D";
XDocument xd = XDocument.Parse(xml);
xd.Root.Element("product").Elements("auto").ToList()
.ForEach(x=>
{
var name = x.Descendants("name").First();
if (name.Element("first").Value != first
&& name.Element("last").Value != last)
x.Remove();
});
Console.WriteLine(xd);
打印:
<result>
<product>
<auto>
<report>
<auto>
<admin></admin>
<report>
<search>
<subjects>
<subject>
<name>
<first>John</first>
<last>D</last>
</name>
</subject>
</subjects>
</search>
</report>
</auto>
</report>
</auto>
</product>
</result>