Как я могу проверить, сколько детей имеет узел? - PullRequest
2 голосов
/ 27 ноября 2011

Я пытаюсь определить количество дочерних элементов, которые есть у узла, но единственное, что я могу получить - есть ли у них дочерние элементы, а не сколько.Например: я использую Xpath в C # (XPathNodeIterator, XPathDocument и XPathNavigator)

РЕДАКТИРОВАТЬ:

iterator.Count

не то, что я хочудостичь, потому что он возвращает количество всех узлов, возвращаемых выражением.Я хотел бы знать, сколько дочерних узлов находится «под» iterator.Current

Это Xml-файл, с которым я работаю (как в примере)

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<breakfast_menu>
    <food>
        <name>Belgian Waffles</name>
        <price>$5.95</price>
        <description>two of our famous Belgian Waffles with plenty of real maple syrup</description>
        <calories>650</calories>
    </food>
    <food>
        <name>Strawberry Belgian Waffles</name>
        <price>$7.95</price>
        <description>light Belgian waffles covered with strawberries and whipped cream</description>
        <calories>900</calories>
    </food>
</breakfast_menu>

`

Мой код:

XPathDocument document = new XPathDocument(@"C:\\xmls\\chair1.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathNodeIterator iterator = navigator.Select("//*");

    while (iterator.MoveNext())
    {
        stringList.Add(iterator.Current.Name);
        if(iterator.Current.HasChildren)   stringList.Add(iterator.Current.Value);
        stringList.Add(" ------- ");
    }

И что он производит

enter image description here

Ответы [ 4 ]

7 голосов
/ 27 ноября 2011
iterator.Current.SelectChildren(XPathNodeType.All).Count
4 голосов
/ 27 ноября 2011
XPathNodeIterator.Count 

Должен дать вам Количество детей, или 0, если нет выбранных узлов.

2 голосов
/ 27 ноября 2011

Чистое решение XPath - используйте это выражение XPath :

count(//*)

Или полный код C # (кажется, самый короткий из всех предлагаемыхдо сих пор :)

(int)navigator.Evaluate("count(//*)")

Или, если вы хотите получить количество дочерних элементов узла current , используйте :

(int)iterator.Current.Evaluate("count(*)")
0 голосов
/ 27 ноября 2011
var count = iterator.Count;

Играй со ссылкой!http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...