使用 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 --;
}
现在当我以这种方式有一个节点 <节点>
。 (我不知道 libxml2 如何将 XML 表示为 )
I'm using libxml2 version 2.6.32 which doesn't have function xmlChildElementCount so I wrote my custom function which is given below
int child_node_count(const xmlNodePtr nodePtr){
register int i = 0;
for(xmlNodePtr node = nodePtr->children;node;node = node->next,i++);
return i --;
}
Now when I've a node in this fashion <node>somevalue</node>
I was expecting the function to return 0 count but I'm getting count as 1 is this a mistake in my code or somevalue is really a child of <node>
. (I don't know how libxml2 represents XML as )
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,somvalue 确实是一个节点 - XML_TEXT_NODE 类型的节点。有关您可能遇到的节点类型的完整列表,请参阅此处: http://www .xmlsoft.org/html/libxml-tree.html#xmlElementType。
您可能正在寻找
xmlChildElementCount
?请参阅:http://www.xmlsoft.org/html/libxml-tree.html #xmlChildElementCountYes,
somvalue
really is a node - a node of type XML_TEXT_NODE. See here for a complete list of types of nodes you may encounter: http://www.xmlsoft.org/html/libxml-tree.html#xmlElementType.You might be looking for
xmlChildElementCount
? See: http://www.xmlsoft.org/html/libxml-tree.html#xmlChildElementCount为了匹配官方
xmlChildElementCount
的行为,您应该仅在node->type == XML_ELEMENT_NODE
时增加计数器,这样您就不会计算文本节点和其他类型的非节点。 -元素节点。您还应该接受非常量
xmlNodePtr
参数,并在nodePtr == NULL
时返回 0To match the behaviour of the official
xmlChildElementCount
you should only increment the counter whennode->type == XML_ELEMENT_NODE
so you don't count text nodes and other types of non-element node.You should also accept non-const
xmlNodePtr
arguments and return 0 ifnodePtr == NULL