使用linq到xml在元素中获取多个数据项

时间:2010-05-06 21:02:03

标签: xml linq-to-xml

使用linq to xml

获取元素中的多个数据项

我有一个像这样的xml文件

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

我得到了说xml并希望获得所有元素。这是我的代码。

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

我试过c.Elements但是没有用。我需要做些什么才能获得所有内部元素?此代码只获取第一个“Inside”标记。

2 个答案:

答案 0 :(得分:1)

这应该会给你"Jibba""Jabba";您需要usingSystem.Linq的{​​{1}}指令:

System.Xml.Linq

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

    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;

答案 1 :(得分:0)

我需要更进一步,并不清楚如何做到这一点。谢谢你的跳跃点。这里有一些额外的水果来节省一些劳动力。

给出一些额外的xml乐趣:

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

我添加了一个where子句,用于查找父“TopLevel”中具有ident属性值为“one”的元素。

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查询中的小部分“.Elements(”inside“).XML区分大小写.BV非常不区分大小写.C#用户请随意忽略我们的年轻人。只是想展示一个地方,一个问题。

马特