我正在尝试获得一个节点拥有的子节点数,但我唯一能得到的是是否有任何子节点数不是多少。例如 :
我在C#中使用Xpath(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(" ------- ");
}
它产生什么
答案 0 :(得分:7)
iterator.Current.SelectChildren(XPathNodeType.All).Count
答案 1 :(得分:4)
XPathNodeIterator.Count
应该为您提供儿童计数,如果没有选定的节点,则为0。
答案 2 :(得分:2)
纯XPath解决方案 - 使用此XPath表达式:
count(//*)
或者,完整的C#代码(似乎是目前为止提供的最短内容:)
(int)navigator.Evaluate("count(//*)")
或者,如果您想获得当前节点的子项数,请使用:
(int)iterator.Current.Evaluate("count(*)")
答案 3 :(得分:0)
var count = iterator.Count;
参考玩! http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx