c - 使用 libxml2 在 xml 文件中查找节点

标签 c xml-parsing libxml2

我正在尝试编写一个函数,用于在 xml 文件中查找具有指定名称的节点。 问题是该函数永远找不到指定的节点。

xmlNodePtr findNodeByName(xmlNodePtr rootnode, const xmlChar * nodename)
{
    xmlNodePtr node = rootnode;
    if(node == NULL){
        log_err("Document is empty!");
        return NULL;
    }

    while(node != NULL){

        if(!xmlStrcmp(node->name, nodename)){
            return node; 
        }
        else if(node->children != NULL){
            node = node->children; 
            xmlNodePtr intNode =  findNodeByName(node, nodename); 
            if(intNode != NULL){
                return intNode;
            }
        }
        node = node->next;
    }
    return NULL;
}

我可以在调试器中看到函数确实深入到子节点但仍然返回 NULL。

提前致谢。

最佳答案

else if(node->children != NULL) {
    node = node->children; 
    xmlNodePtr intNode =  findNodeByName(node, nodename); 
    if (intNode != NULL) {
        return intNode;
    }
}

这应该是:

else if (node->children != NULL) {
    xmlNodePtr intNode =  findNodeByName(node->children, nodename); 
    if(intNode != NULL) {
        return intNode;
    }
}

效果不错

关于c - 使用 libxml2 在 xml 文件中查找节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13021785/

相关文章:

python - 使用 Python 3 解析 xml 中的 html(或其他 xml)

xsd - 如何使用 libxml2 生成 XML 文件?

node.js - Nodejs : parsing XML, 编辑值,使用 sax-js 模块保存最终结果

ubuntu - 在 ubuntu 的代码块中编译 Libxml2 时出错

c++ - 如何反转 xml 树中的遍历节点,特别是 libxml/c++

子进程执行 fork 调用之前写的语句

c++ - 将 C 重构为 C++ 以进行伯努利数计算

c - 三元运算符交互的多个部分

c - Gtkuimanager 弹出子菜单

python - 只返回 xpath 中元素的文本(python/lxml)