2013-01-15 48 views
10

pugixml节点对象是否有多个子节点的方法?我不能在文档中找到它,并有如下使用迭代器:pugixml子节点的数量

int n = 0; 
for (pugi::xml_node ch_node = xMainNode.child("name"); ch_node; ch_node = ch_node.next_sibling("name")) n++; 
+0

不用担心,我恢复了它刚才之前,我看了你的消息在这里。感谢您的优秀代码! – lsdavies

回答

13

没有内置函数来直接计算是什么;一个其它的方法是使用std::distance

size_t n = std::distance(xMainNode.children("name").begin(), xMainNode.children("name").end()); 

当然,这是在子节点的数目线性;请注意,计算所有子节点的数量std::distance(xMainNode.begin(), xMainNode.end())也是线性的 - 不存在对子节点数量的常量访问。

+4

注:这是pugixml的作者。 – Homer6

+1

看哪,pugixml的作者!大声笑。顺便说一下,对于没有“名称”部分而感兴趣的人,您可以简单地删除.children()。请参阅https://code.google.com/p/pugixml/issues/detail?id=105#c3 – Andrew

1

你可以使用基于一个XPath的搜索表达式(无效率的保证,虽然):

xMainNode.select_nodes("name").size()