获取项目的深度

时间:2010-02-05 20:24:55

标签: asp.net linq linq-to-xml

我有这样的xml:

<A><B>test</B><B><B>test2</B></B><B><B><B>test2</B></B></B></A>

如何使用linq to xml

获取每个项目的级别

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

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

2 个答案:

答案 0 :(得分:6)

假设您已将XML加载为XDocumentXElement对象,

myXElement.AncestorsAndSelf().Count()

应该给你任何给定元素的深度。

答案 1 :(得分:0)

当你有一个根元素时,你可以找到每个文本节点的深度,如下所示:

var depths =
  root.
    DescendantNodesAndSelf().
    Where(e => e.NodeType == XmlNodeType.Text).
    Select(n => new { Text = n.ToString(), Depth = n.Parent.Ancestors().Count()});