【问题标题】:Counting number of Childs for a node using libxml2使用 libxml2 计算节点的子节点数
【发布时间】:2011-11-16 04:06:33
【问题描述】:

我使用的是 libxml2 版本 2.6.32,它没有函数 xmlChildElementCount,所以我编写了下面给出的自定义函数

int child_node_count(const xmlNodePtr nodePtr){
    register int i = 0;
    for(xmlNodePtr node = nodePtr->children;node;node = node->next,i++);
    return i --;
}

现在,当我以这种方式<node>somevalue</node> 拥有一个节点时,我期待函数返回 0 个计数,但我得到计数​​,因为 1 这是我的代码中的一个错误,或者 somevalue 确实是 <node> 的一个孩子. (我不知道 libxml2 如何将 XML 表示为)

【问题讨论】:

  • 我认为你在这里传递根节点的指针..最好你传递你的期望节点的指针来计算它的子节点..
  • 我传递了 <node> 标签本身的指针,它仍然返回计数,可能是代码错误,但我无法弄清楚:(
  • 你为什么要注册?你为什么要递减我?否则代码很好..可能是 libxml2 代码中误解了一些东西
  • 注册只是为了让它更快(可能不是必需的,但实际上我的代码中有漏洞,我应该返回--i而不是i-- :) 递减因为i 将增加一超过现有节点数

标签: c libxml2


【解决方案1】:

是的,somvalue 确实是一个节点 - XML_TEXT_NODE 类型的节点。有关您可能遇到的节点类型的完整列表,请参见此处:http://www.xmlsoft.org/html/libxml-tree.html#xmlElementType

您可能正在寻找xmlChildElementCount ?见:http://www.xmlsoft.org/html/libxml-tree.html#xmlChildElementCount

【讨论】:

    【解决方案2】:

    为了匹配官方xmlChildElementCount 的行为,您应该只在node->type == XML_ELEMENT_NODE 时增加计数器,这样您就不会计算文本节点和其他类型的非元素节点。

    您还应该接受非 const xmlNodePtr 参数,如果 nodePtr == NULL 则返回 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多