计算C#中的XmlNodes总数

时间:2010-04-15 12:50:03

标签: c# xml xpath

我正试图找到一种方法来递归地从XmlNode获取子节点的总数。

这就是说我想要算上所有的孩子,大孩子等等。

我觉得它像

node.SelectNodes(<fill in here>).Count

但我不知道XPath是什么。

6 个答案:

答案 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

选择所有节点

//*