我試圖找到一種方法來從XmlNode遞歸獲取子節點的總數。C#中的XmlNode計數總數
這是說我想指望所有的孩子,孫子等
我認爲它有點像
node.SelectNodes(<fill in here>).Count
,但我不知道XPath是什麼。
我試圖找到一種方法來從XmlNode遞歸獲取子節點的總數。C#中的XmlNode計數總數
這是說我想指望所有的孩子,孫子等
我認爲它有點像
node.SelectNodes(<fill in here>).Count
,但我不知道XPath是什麼。
的XPath支持一種叫做Axis specifier,所以你要尋找的代碼是
node.SelectNodes("descendant::*").Count
正在尋找這個無處不在。謝謝 :) – 2011-12-15 13:47:05
我認爲這會爲你做它雖然不是通過XPATH:
void CountNode(XmlNode node, ref int count)
{
count += node.ChildNodes.Count;
foreach (XmlNode child in node.ChildNodes)
{
CountNode(child, ref count);
}
}
僅供參考這裏是XPath中的計數功能的鏈接。
http://msdn.microsoft.com/en-us/library/ms256103.aspx
所以如果你正在尋找所有相同類型的節點,你可以做
//Your_node
選擇所有節點
//*
'Descendant :: Your_Node'選擇當前節點下所有名爲'Your_Node'的節點 – svick 2010-04-15 13:18:24
如果你正在做一個未經過濾的計數,您的問題意味着,您可以使用ChildNodes
屬性遍歷它們:
private int CountChildren(XmlNode node)
{
int total = 0;
foreach (XmlNode child in node.ChildNodes)
{
total++;
total += CountChildren(child);
}
return total;
}
@Steve Danner,@Kevin是我知道我可以遞歸地做,只是假設會有一個xpath的方式 – 2010-04-15 12:58:11
您可以使用財產以後這樣的:
private static int CountNodes(XmlNode node)
{
int count = 0;
foreach (XmlNode childNode in node.ChildNodes)
{
count += CountNodes(childNode);
}
return count + node.ChildNodes.Count;
}
using System.Xml.Linq;
node.DescendantNodes().Count();
中的XPath你是後:
descendant::node()
(1)
或
descendant::*
(2)
第一的XPath expresion上述(1)選擇在由當前節點爲根的子樹的任意節點(文本節點,處理指令,註釋,元素)。
(2)選擇以當前節點爲根的子樹中的任何元素節點。
(2)是等價的到'後代或自己:: *',但問題只針對子節點,不包括當前節點(當然,這只是減1的問題) – svick 2010-04-15 13:16:00
@svick:謝謝,糾正。 – 2010-04-15 13:31:56
這也是對的!但他需要的分數比你多:S – 2010-04-15 14:28:02
沒有看到你的XML的樣本,我們無法弄清楚的XPath要麼! 雖然這種方法是正確的。 – Oded 2010-04-15 12:54:37
爲什麼您需要查看我的XML,因爲我想要統計所有節點而不考慮名稱? – 2010-04-15 13:02:58