【问题标题】:Get the depth of an Item获取项目的深度
【发布时间】:2010-02-05 20:24:55
【问题描述】:

我有这样的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 可能会提供更好的东西。

【问题讨论】:

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


    【解决方案1】:

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

    myXElement.AncestorsAndSelf().Count()

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

    【讨论】:

    • AncestorsAndSelf 没有返回 Count() 方法。另外,上述代码的语义将返回大于实际基于 0 的深度 1 的树深度。考虑下面的代码 sn-p,它纠正了这些问题。
    • public static int GetDepth(this XElement element) { int Count = 0; foreach (XElement elem in element.Ancestors()) Count++;返回计数; }
    • 有一个Count()方法,它是一个LINQ扩展方法。如果您不想计算当前元素,请使用 Ancestors() 而不是 AncestorsAndSelf()。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2015-07-16
      • 1970-01-01
      • 2021-10-11
      • 2011-11-06
      • 2013-06-20
      • 1970-01-01
      相关资源
      最近更新 更多