你曾经有过这样的日子,当你挖了一个洞,但你现在如此深入,唯一的选择是继续挖掘,看看你出来的地方? 我只是想在最新的组件中嘻嘻哈哈,我正在编写使用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;
任何帮助表示我希望如果你有任何线索,这是非常直接的; - )
答案 0 :(得分:1)
如果需要获取所有Series元素,可以使用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服务获取此数据。