使用libxml2计算节点的Childs数

时间:2011-11-16 04:06:33

标签: c libxml2

我使用的是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这是我的代码中的错误或某些值实际上是{的孩子{1}}。 (我不知道libxml2如何表示XML)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

则返回0