获取多个数据项中的一个元素使用LINQ到XML

问题描述:

获取多个数据项中的一个元素使用LINQ到XML获取多个数据项中的一个元素使用LINQ到XML

我有这样

<TopLevel> 
    <Inside> 
    Jibba 
    </Inside> 
    <Inside> 
    Jabba 
    </Inside> 
</TopLevel> 

一个XML文件,我给说XML和和想要获得所有元素。这是我的代码。

var q = from c in loaded.Descendants("TopLevel") 
      select (XElement)c.Element("Inside"); 

我试过c.Elements,但没有奏效。我需要做些什么来获得所有内部元素?该代码只是获取第一个“Inside”标签。

这应该给你"Jibba""Jabba";你需要两个System.LinqSystem.Xml.Linqusing指令:

var q = from c in loaded.Descendants("TopLevel").Elements("Inside") 
      select c.Value; 

或(不太具体,但仍然有效):

var q = from c in loaded.Descendants("TopLevel").Elements() 
      select c.Value; 

,或者如果你想要做更多的东西与元素,SelectMany

var q = from c in loaded.Descendants("TopLevel") 
      from i in c.Elements("Inside") 
      select i.Value; 

(如果你想要的元素,而不是字符串,那么就select c;select i; - 删除.Value

我需要更进一步,并没有真正清楚如何去做。感谢跳转点。这里有一些额外的水果来节省一些劳动力。

考虑一些额外的XML乐趣:

<TopLevel> 
    <Inside ident="one">Jibba</Inside> 
    <Inside ident="two">Jabba</Inside> 
    <Inside ident="one">AlsoJibba</Inside> 
    <Inside ident="three">AlsoJabba</Inside> 
</TopLevel> 

我添加了一个where子句,以查找里面的父“顶层”有“一”的ident属性值的元素。

Dim query = From c In loaded.Descendants("TopLevel").Elements("inside") 
      Where c.Attribute("ident") = "one" 
      Select c.Value 

然后做的结果有点演示控制台运行:

For each inside in query 
    Console.WriteLine(inside) 
Next 

哪个输出:

Jibba 
AlsoJibba 

尾翼警报展望:

现在,如果你复制粘贴我刚刚做了什么,你正在使用VB,就像我是你一样一个特别恼人的细微差别。该代码不起作用。注意LINQ查询中的小节“.lele(”inside“),XML区分大小写,VB极其不区分大小写,C#用户可以随意忽略我们的年轻人,只是想演示一下where和gotcha。

马特