pugixml子节点数量

16

pugixml节点对象是否有“子节点数量”的方法?我在文档中没有找到它,所以只能使用迭代器来实现:

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

没关系,我在看到你的留言之前刚刚恢复了它。非常感谢你提供的优秀代码! - lsdavies
3个回答

25

没有内置函数可以直接计算这个;另一种方法是使用std::distance

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

当然,这是与子节点数量成线性关系的;请注意,计算所有子节点数量std::distance(xMainNode.begin(), xMainNode.end())也是线性的 - 没有常数时间访问子节点数量。


9
注:这是pugixml的作者。 - Homer6

4
您可以使用基于XPath搜索的表达式(但效率不能保证):
xMainNode.select_nodes( "name" ).size()

1
int children_count(pugi::xml_node node)
{
  int n = 0;
  for (pugi::xml_node child : node.children()) n++;
  return n;
}

1
我认为你应该解释一下你的答案。 - Omar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接