从数字XDocument中选择元素

时间:2013-05-28 17:12:17

标签: c# xml windows-phone-7 linq-to-xml

我有一个看起来像这样的XML

<TripList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlopen.rejseplanen.dk/xml/rest/hafasRestTrip.xsd">
   <Trip>
      <Leg name="til fods" type="WALK">...</Leg>
      <Leg name="Bus 61" type="BUS">...</Leg>
      <Leg name="til fods" type="WALK">...</Leg>
      <Leg name="Bus 52" type="BUS">...</Leg>
      <Leg name="til fods" type="WALK">...</Leg>
   </Trip>
   <Trip>
      <Leg name="til fods" type="WALK">...</Leg>
      <Leg name="Bus 61" type="BUS">...</Leg>
      <Leg name="til fods" type="WALK">...</Leg>
      <Leg name="Bus 52" type="BUS">...</Leg>
      <Leg name="til fods" type="WALK">...</Leg>
   </Trip>
   <Trip>
      <Leg name="til fods" type="WALK">...</Leg>
      <Leg name="Bus 191" type="BUS">...</Leg>
      <Leg name="til fods" type="WALK">...</Leg>
      <Leg name="Bus 152" type="BUS">...</Leg>
      <Leg name="til fods" type="WALK">...</Leg>
   </Trip>
   <Trip>
      <Leg name="til fods" type="WALK">...</Leg>
      <Leg name="Bus 31" type="TB">...</Leg>
      <Leg name="til fods" type="WALK">...</Leg>
   </Trip>
</TripList>

我需要选择&#34;第三&#34;在Windows Phone中使用XDocument的Trip元素,我该怎么做?

我尝过像

这样的东西
foreach (var Stykke in xdoc.Root.Elements("Trip")[2].Elements("Leg"))
{
}

如您所见,想从第三个获得所有Leg元素。

这可能是一个非常愚蠢的问题,但我无法在其他任何地方找到适当的答案。

3 个答案:

答案 0 :(得分:5)

ElementAt可能适合您。

您正在寻找的是

foreach (var Stykke in xdoc.Root.Elements("Trip").ElementAt(2).Elements("Leg"))
{
}

或者如果您愿意,也可以使用ToList然后使用索引器获取结果。:

foreach (var Stykke in xdoc.Root.Elements("Trip").ToList()[2].Elements("Leg"))
{
}

我不确定WP7是否允许您使用这些方法。如果没有,请评论并告诉我。

答案 1 :(得分:0)

怎么样:

xdoc.Descendants("Trip")[2].Descendants("Leg")

答案 2 :(得分:0)

使用LINQ to XML,您将获得类似

的查询
XDocument X = XDocument.Load(Path);
var ThirdTripElement = X.Element("TripList")
      .Elements("Trip")
      .ElementAt(2)
      .Elements("Leg")
      .Select(E => new { Name = E.Attribute("name").Value, 
                         Type = E.Attribute("type").Value });