14

pugixml 节点对象是否有 number-of-child-nodes 方法?我在文档中找不到它,不得不使用如下迭代器:

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

3 回答 3

21

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

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

当然,这在子节点的数量上是线性的;请注意,计算所有子节点的数量std::distance(xMainNode.begin(), xMainNode.end())也是线性的 - 没有对子节点计数的恒定时间访问。

于 2013-01-15T05:26:01.360 回答
3

您可以使用基于 xpath 搜索的表达式(但不能保证效率):

xMainNode.select_nodes( "name" ).size()
于 2013-01-28T19:09:49.260 回答
1
int children_count(pugi::xml_node node)
{
  int n = 0;
  for (pugi::xml_node child : node.children()) n++;
  return n;
}
于 2020-08-29T21:30:52.270 回答