我有一个XDocument,我想在Account节点值= TEST
时删除整个Allocation节点<Order>
<Quantity>800</Quantity>
<Allocations>
<Allocation>
<Account>ACCT1</Account>
<Quantity>100</Quantity>
</Allocation>
<Allocation>
<Account>TEST</Account>
<Quantity>300</Quantity>
</Allocation>
<Allocation>
<Account>ACCT4</Account>
<Quantity>400</Quantity>
</Allocation>
</<Allocations>
</Order>
And my code:
XElement root = XElement.Parse(util.DocAsString(xmlDoc));
IEnumerable<string> acctList = from acct in root.Descendants("Account")
select (string)acct;
foreach (var acct in acctList)
{
root.Elements("Allocation").Where(aa => aa.Element("Account").Value == "TEST").Remove();
}
但是,这不是删除节点。请帮忙,谢谢。
答案 0 :(得分:0)
目前,foreach
循环中的表达式并不会删除任何内容,因为Remove()
之前的部分不会返回任何元素。这是因为<Allocation>
不是根元素的直接子元素(您可以使用Descendants()
代替Elements()
来修复它。)
最终,你根本不需要foreach
循环:
XElement root = XElement.Parse(util.DocAsString(xmlDoc));
root.Descendants("Allocation")
.Where(aa => aa.Element("Account").Value == "TEST")
.Remove();
要将更改保留回XML文件(如果您实际从文件中读取它们),请不要忘记将修改后的XElement
保存回原始文件。