使用 LINQ 抓取基于具有多个节点的属性的正确节点 XML

Grabbing correct node based on attribute with multiple nodes using LINQ to XML

我在 LINQ 中编写查询以从 XML 文件中获取我需要的数据时遇到了一些问题。

XML 文件设置如下所示

<Study id ="">
  <Multi>
    <filepath id =""></filepath>
    <filepath id ="display"></filepath>
    <combined></combined>
  </Multi>
</Study>

<Study id ="">
  <Multi>
    <filepath id =""></filepath>
    <filepath id ="display"></filepath>
    <combined></combined>
  </Multi>
</Study>

我正在尝试获取文件路径节点的值,其中 id ="display"

var displaySettingsQuery = (from n in _XML.Descendants("Study").Descendants("Multi")
                                    where n.Element("Multi").Attribute("id").Value == "display"
                                    select n.Element("filepath").Value);

这似乎不起作用,因为 Element() 方法仅获取 "Multi" 的第一个实例。但是,如果我使用 Elements(),则会出现语法错误,因为 Elements 是 Ienumerable,所以我无法直接调用属性。我将如何遍历 "Multi" 集合以进行比较?

感谢您的帮助。

如果将 from 子句添加到 return <filepath> 元素而不是 <Multi>,这会更容易,因为您只关心 <filepath> whereselect 子句:

var displaySettingsQuery = (from n in _XML.Descendants("Study")
                                          .Elements("Multi")
                                          .Elements("filepath")
                            where n.Attribute("id").Value == "display"
                            select n.Value);