LINQ to XML,以正确的顺序检索rigt节点

时间:2010-05-19 05:54:23

标签: xml linq tree

你曾经有过这样的日子,当你挖了一个洞,但你现在如此深入,唯一的选择是继续挖掘,看看你出来的地方? 我只是想在最新的组件中嘻嘻哈哈,我正在编写使用LINQ to XML,因为我看到了所有hooplah的时间。

问题:我正在生成一个XML树来表示图表上系列的“集合”,每个系列都可以让子系列中的一个子系列'意味着'这个系列的点(要绘制图形)基于父系列。因此,我将XML作为规则集创建,然后将其传递给绘图例程,该例程“应该”遍历树并按此顺序绘制它们,即没有子项在其父级之前呈现。

我的XML是以编程方式创建的。一个例子看起来像这样(不是100%肯定我也是这样做的)

<Chart>
  <Chart_Config>
    <Color Color="white" />
    <Panels Panel="1" />
  </Chart_Config>
  <Series ID="0">
    <Name>1154.close</Name>
    <ID>0</ID>
    <IndID>-1</IndID>
    <PID>0</PID>
    <iType>0</iType>
    <Parent>0</Parent>
    <Series ID="1">
      <Name>1.Indicator</Name>
      <ID>1</ID>
      <IndID>0</IndID>
      <PID>0</PID>
      <iType>0</iType>
      <Parent>1154.close</Parent>
    </Series>
    <Series ID="2">
      <Name>2.Indicator</Name>
      <ID>2</ID>
      <IndID>0</IndID>
      <PID>0</PID>
      <iType>0</iType>
      <Parent>1154.close</Parent>
    </Series>
    <Series ID="3">
      <Name>3.Indicator</Name>
      <ID>3</ID>
      <IndID>0</IndID>
      <PID>0</PID>
      <iType>0</iType>
      <Parent>1154.close</Parent>
   </Series>
  </Series>
</Chart>

上面的xml有点狡猾,但在这种情况下,我有1个系列(id = 0)有3个系列作为孩子,因此3个系列基于ID = 0系列。

问题是我必须使用哪些LINQ命令才能将所有<series>个节点输出,以便它们进入I.e.从根到叶子。

代码我只得到第一个系列节点而不是它的子节点我无法理解这个LINQ语法或概念。

        var result = from e in ChartRule.Elements("Series")
                     select e;

任何帮助表示我希望如果你有任何线索,这是非常直接的; - )

2 个答案:

答案 0 :(得分:1)

如果需要获取所有Seri​​es元素,可以使用Descendants(),它相当于“// Series”xpath表达式:

from e in ChartRule.Descendants("Series")
                     select e

然后你可以编程检查父数据......

答案 1 :(得分:0)

Descendants():按文档顺序返回此文档或元素的后代元素的过滤集合。只有具有匹配XName的元素才会包含在集合中。

这就是你所需要的,正如mamoo所指出的那样。

我宁愿这样写:

from e in ChartRule.Descendants()
                   .Where(x => x.Name.LocalName == "Series")
                   select e

这可以避免命名空间冲突,以防您从Web服务获取此数据。