如何获得节点的深度

时间:2012-03-14 09:54:12

标签: .net linq linq-to-xml

  

可能重复:
  Get the depth of an Item

我有这样的xml:

 <Parent>
     <child>test</child>
     <child>
         <child>test2</child>
     </child> 
     <child> 
         <child>
             <child>test3</child>
         </child>
     </child>
 </Parent>

如何使用linq to xml

获取每个项目的级别

测试水平= 1级测试2 = 2级测试3 = 3

我不知道会有多少个节点或者有多少个级别。我可以把它写成递归函数,但我认为linq to xml可能有更好的东西。

1 个答案:

答案 0 :(得分:2)

您可以使用xpath计算节点级别。例如。对于<child>test3</child>

var element = d.XPathSelectElement("Parent/child/child/child");
var level = element.XPathSelectElements("ancestor::*").Count();

编辑:评论中的@Richard建议在不实例化XElement个实例的情况下计算父节点:

var level = (double)element.XPathEvaluate("count(ancestor::*)");

这可以拯救他们

当然,您可以使用Ancestors()方法(如另一个答案中所提出的)获取节点的祖先元素的集合并计算它们:

var level = element.Ancestors().Count();

这会给你相同的结果。