我使用的是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)
答案 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