如何获得节点的深度
我有这样的XML:
<Parent>
<child>test</child>
<child>
<child>test2</child>
</child>
<child>
<child>
<child>test3</child>
</child>
</child>
</Parent>
我怎样才能得到每一种的水平使用linq to xml的项目
leve测试1 =测试2的水平= 2测试3的水平= 3
我不知道会有多少个节点,或者会有多少个级别。我可以把它写成一个递归函数,但我认为linq to xml可能有更好的提供。
您可以使用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();
这会给你同样的结果。
我建议'level = element.XPathEvaluate(“count(ancestor :: *)”)作为int':这样就保存了实例化'XElement'实例,然后对它们进行计数。 – Richard 2012-03-14 15:00:07
@Richard,谢谢你的出色建议。看来这是最好的解决方案。唯一的事情 - 返回的表达式的类型是“double”而不是“int”。 – Alex 2012-03-14 15:05:59
作为double的返回值是因为XSLT中的所有数值都是浮点数,但显然count的结果必须是整数值 - 可能应该首选包含明确转换的转换:-)。 – Richard 2012-03-15 10:24:25
s/ASP.NET/.NET/in标签:这里没有关于ASP.NET。 – Richard 2012-03-15 10:25:27