可能重复:
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可能有更好的东西。
答案 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();
这会给你相同的结果。