使用 Linq to XML 访问 XML 中的二级节点

Posted

技术标签:

【中文标题】使用 Linq to XML 访问 XML 中的二级节点【英文标题】:Access a 2nd level node in XML using Linq to XML 【发布时间】:2012-11-22 08:56:29 【问题描述】:

我有以下 XML 文件:

<tree>
    <branchs>
         <branch id=1>
             <apple id=1 color=green/>
             <apple id=2 color=red/>
         </branch>
         <branch id=2>
             <apple id=1 color=green/>
             <apple id=2 color=red/>
         </branch>
    </branchs>
</tree>

我希望 SQL 命令从分支 id 1 访问苹果 id#1,而不是更改颜色(第一次),然后能够从这个分支中删除这个苹果。

我尝试了以下方法来移除一个苹果,但没有任何结果

XDocument doc = XDocument.Load(myxmlFile);
var result = (from selectedApples in 
                (from selectedBranch in doc.Element("Branchs").Elements("Branch) 
                where selectedBranch.Attribute("id").Value == 1 
                select selectedBranch)
                where selectedApples.Attribute("id").Value == 1
                select selectedApples).ToList();

 result.ToList().ForEach(apple => apple.Remove());

我想我犯了一个错误...我想我也离解决方案不远了...

有什么帮助吗?

【问题讨论】:

【参考方案1】:

不确定它是否是优化的解决方案......但它正在工作。

XDocument doc = XDocument.Load(myxmlFile);
var results = from selectedApples in doc.Root.Element("branchs").Descendants()
                where selectedApples.Attribute("id").Value == 1
                select selectedApples.Elements("apple");

foreach(var result in results)
    result.Where(a => a.Attribute("id").Value == 1).ToList().Foreach(a => a.Remove());

doce.Save(myxmlFile);

【讨论】:

以上是关于使用 Linq to XML 访问 XML 中的二级节点的主要内容,如果未能解决你的问题,请参考以下文章

有没有更快的方法来检查 LINQ to XML 中的 XML 元素?

C#中的Linq to Xml详解

Linq to XML

LINQ to XML

带有 XML 数据库字段的 Linq-to-SQL —— 为啥会这样?

LINQ to XML概述