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

时间:2015-05-20 20:04:29

标签: c# xml 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 =&#34;显示&#34;

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

这似乎不起作用,因为Element()方法只抓取&#34; Multi&#34;的第一个实例。但是,如果我使用Elements(),我会收到语法错误,因为Elements是一个Ienumerable,所以我无法直接调用属性。我将如何迭代&#34; Multi&#34;收集以便进行比较?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您使from子句返回<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);