Считайте общее количество XmlNodes в C#

Я пытаюсь найти способ получить общее количество дочерних узлов от XmlNode рекурсивно.

То, что это должно сказать, что я хочу считать всех детей, главных детей и т.д.

Я думаю что-то как

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

но я не знаю, каков XPath.

5
задан svick 20 February 2013 в 19:07
поделиться

6 ответов

XPath поддерживает так называемый спецификатор оси , поэтому код, который вы ищете, -

node.SelectNodes("descendant::*").Count
8
ответ дан 18 December 2019 в 13:12
поделиться

Вы можете использовать что-то вроде этого:

private static int CountNodes(XmlNode node)
{
    int count = 0;

    foreach (XmlNode childNode in node.ChildNodes)
    {
        count += CountNodes(childNode);
    }

    return count + node.ChildNodes.Count;
}
0
ответ дан 18 December 2019 в 13:12
поделиться

Если вы выполняете подсчет нефильтрованных , что подразумевает ваш вопрос, вы можете просто пройти их, используя ChildNodes свойство:

private int CountChildren(XmlNode node)
{
   int total = 0;

   foreach (XmlNode child in node.ChildNodes)
   {
      total++;
      total += CountChildren(child);
   }
   return total;
}
0
ответ дан 18 December 2019 в 13:12
поделиться

Я думаю, это сделает это за вас, но не через xPath:

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

    foreach (XmlNode child in node.ChildNodes)
    {
        CountNode(child, ref count);
    }
}

Для справки - ссылка на функцию count в xpath.

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

, поэтому, если вы ищете все узлы одного и того же типа, вы можете сделать

//Your_node

, чтобы выбрать все узлы

//*
]
-1
ответ дан 18 December 2019 в 13:12
поделиться
using System.Xml.Linq;

node.DescendantNodes().Count();
3
ответ дан 18 December 2019 в 13:12
поделиться

XPath, который вам нужен, :

Потомок :: узел () (1)

или

Потомок :: * (2)

Первое выражение XPath (1) выше выбирает любой узел (текстовый узел, инструкция по обработке, комментарий, элемент) в поддереве, основанном на текущем узле.

(2) выбирает любой элемент-узел в поддереве, корень которого лежит на текущем узле.

4
ответ дан 18 December 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: