Как я могу проверить, сколько детей у узла?



Я пытаюсь получить количество детей, которые есть у узла, но единственное, что я могу получить, - это есть ли у него дети, а не сколько. Например :
Я использую 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(" ------- ");
}


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



Введите описание изображения здесь

577   4  

4 ответов:

iterator.Current.SelectChildren(XPathNodeType.All).Count
XPathNodeIterator.Count 

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

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

count(//*)

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

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

Или, если вы хотите получить число потомков текущего узла , используйте:

(int)iterator.Current.Evaluate("count(*)")
var count = iterator.Count;

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

Comments

    Ничего не найдено.