xElement删除父节点

时间:2015-03-17 17:50:52

标签: c# linq-to-xml xelement

我有一个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();
}

但是,这不是删除节点。请帮忙,谢谢。

1 个答案:

答案 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保存回原始文件。