我正试图找到一种方法来递归地从XmlNode获取子节点的总数。
这就是说我想要算上所有的孩子,大孩子等等。
我觉得它像
node.SelectNodes(<fill in here>).Count
但我不知道XPath是什么。
答案 0 :(得分:8)
XPath支持名为Axis specifier的内容,因此您要查找的代码是
node.SelectNodes("descendant::*").Count
答案 1 :(得分:4)
您所使用的XPath是:
descendant::node()
(1)
或
descendant::*
(2)
上面的第一个XPath expresion(1)选择以当前节点为根的子树中的任何节点(文本节点,处理指令,注释,元素)。
(2)选择以当前节点为根的子树中的任何元素节点。
答案 2 :(得分:3)
using System.Xml.Linq;
node.DescendantNodes().Count();
答案 3 :(得分:0)
如果您正在执行未经过滤的计数,您的问题意味着,您可以使用ChildNodes
属性遍历它们:
private int CountChildren(XmlNode node)
{
int total = 0;
foreach (XmlNode child in node.ChildNodes)
{
total++;
total += CountChildren(child);
}
return total;
}
答案 4 :(得分:0)
您可以使用以下内容:
private static int CountNodes(XmlNode node)
{
int count = 0;
foreach (XmlNode childNode in node.ChildNodes)
{
count += CountNodes(childNode);
}
return count + node.ChildNodes.Count;
}
答案 5 :(得分:-1)
我认为这会为你做,虽然不是通过xPath:
void CountNode(XmlNode node, ref int count)
{
count += node.ChildNodes.Count;
foreach (XmlNode child in node.ChildNodes)
{
CountNode(child, ref count);
}
}
这里有一个指向xpath中count计数函数的链接。
http://msdn.microsoft.com/en-us/library/ms256103.aspx
所以,如果您正在寻找所有相同类型的节点,那么
//Your_node
选择所有节点
//*