我有這樣的XML:獲取一個項目的深度
<A><B>test</B><B><B>test2</B></B><B><B><B>test2</B></B></B></A>
我怎樣才能得到每個使用LINQ to XML
水平測試= 1級測試2的這些項目的水平= 2級TEST3 = 3
我不知道有多少節點有怎麼會或多少級會有的。我可以把它寫成一個遞歸函數,但我認爲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級TEST3 = 3
我不知道有多少節點有怎麼會或多少級會有的。我可以把它寫成一個遞歸函數,但我認爲linq to xml可能有更好的提供。
假設您已經加載了XML作爲XDocument
或XElement
對象,
myXElement.AncestorsAndSelf().Count()
應該給你任何元素的深度。
當你有,你可以找到每一個文本節點的深度如下根元素:
var depths =
root.
DescendantNodesAndSelf().
Where(e => e.NodeType == XmlNodeType.Text).
Select(n => new { Text = n.ToString(), Depth = n.Parent.Ancestors().Count()});
有出自AncestorsAndSelf沒有返回COUNT()方法。此外,上述代碼的語義將返回比實際的基於0的深度更大的樹深度1。考慮下面的代碼片段,它可以解決這些問題。 – 2012-06-30 18:31:54
public static int GetDepth(this XElement element) int count = 0; foreach(元素中的XElement元素.Ancestors()) Count ++; return count; } – 2012-06-30 18:32:30
有一個Count()方法,它是一個LINQ擴展方法。如果您不想計算當前元素,請使用Ancestors()而不是AncestorsAndSelf()。 – Monsignor 2013-11-27 09:50:13