C# 根据子条件删除父节点
在这里,我需要根据某些条件删除xml节点的帮助 这是我的xml 请在这里推荐我C# 根据子条件删除父节点,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,在这里,我需要根据某些条件删除xml节点的帮助 这是我的xml 请在这里推荐我 如果我理解正确: string first = "John"; string last = "D"; XDocument xd = XDocument.Parse(xml); xd.Root.Element("product").Elements("auto").ToList() .ForEach(x=> { var
如果我理解正确:
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>
Linq用于查询,而不是更新。您可以选择所有与您的条件不匹配的节点到一个新的XML结构中,也可以使用linq查找匹配的节点,循环遍历它们,并从原始结构中删除它们。无论哪种方式,您都需要展示您现在所拥有的,以了解您计划如何使用Linq(即使它不起作用)。我正在尝试先提取所需的xml,然后通过添加根元素来重新构造它。感谢您在这里的帮助。
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;
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>