Count Total Number of XmlNodes in C#

前端 未结 6 942
走了就别回头了
走了就别回头了 2021-01-13 04:59

I\'m trying to find a way to get the total number of child nodes from an XmlNode recursively.

That it is to say I want to count all the children, grand children etc.

相关标签:
6条回答
  • 2021-01-13 05:18

    I think this will do it for you though not through xPath:

    void CountNode(XmlNode node, ref int count)
    {
        count += node.ChildNodes.Count;
    
        foreach (XmlNode child in node.ChildNodes)
        {
            CountNode(child, ref count);
        }
    }
    

    For reference here is a link to the count function in xpath.

    http://msdn.microsoft.com/en-us/library/ms256103.aspx

    so if you were looking for all the same type of nodes you could do

    //Your_node
    

    to select all the nodes

    //*
    
    0 讨论(0)
  • 2021-01-13 05:26

    If you're doing an unfiltered count, which your question implies, you could just traverse the them using the ChildNodes property:

    private int CountChildren(XmlNode node)
    {
       int total = 0;
    
       foreach (XmlNode child in node.ChildNodes)
       {
          total++;
          total += CountChildren(child);
       }
       return total;
    }
    
    0 讨论(0)
  • 2021-01-13 05:28

    The XPath you are after is:

    descendant::node() (1)

    or

    descendant::* (2)

    The first XPath expresion (1) above selects any node (text-node, processing-instruction, comment, element) in the subtree rooted by the current node.

    (2) selects any element node in the subtree rooted by the current node.

    0 讨论(0)
  • 2021-01-13 05:28

    You could use somthing like this:

    private static int CountNodes(XmlNode node)
    {
        int count = 0;
    
        foreach (XmlNode childNode in node.ChildNodes)
        {
            count += CountNodes(childNode);
        }
    
        return count + node.ChildNodes.Count;
    }
    
    0 讨论(0)
  • 2021-01-13 05:32

    XPath supports something called Axis specifier, so the code you're looking for is

    node.SelectNodes("descendant::*").Count
    
    0 讨论(0)
  • 2021-01-13 05:33
    using System.Xml.Linq;
    
    node.DescendantNodes().Count();
    
    0 讨论(0)
提交回复
热议问题