获取多个数据项中的一个元素使用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.Linq
和System.Xml.Linq
using
指令:
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。
马特