libxml读取时插入了新节点

问题描述 投票:0回答:1

我正在尝试从程序中解析xml文件。我能够获取rootnode并成功打印其名称,属性等(无需费劲,只有api调用:))。但是,当我尝试读取其子节点并打印其名称时,我没有得到xml中的内容。

这是我的xml文件

<?xml version ="1.0" encoding ="UTF-8" ?>
<LanguageStats>
    <Languages>
        <Language name="C">
            <extensions key="c"/>
            <color key="\x1b[33m"/>
        </Language> 
    </Languages>
</LanguageStats>

这是我的C代码

#include <stdio.h>
#include <unistd.h>
#include <libxml/parser.h>
#include <libxml/tree.h>


#define XML_CFG_FILE "./lang_list.xml"

static void parse_xml(xmlNode* root_node)
{
    xmlNode *curr_node = NULL;

    if( root_node != NULL )
    {
        printf("\nRoot Element %s", root_node->name);
        curr_node = root_node->children;
        printf("\nCurrent Element %s", curr_node->name);
        curr_node = curr_node->children;
        if( !curr_node )
        {
            printf(" Something is wrong");
        }
    }
    else
    {
        printf("Root Element NULL");
    }
}

int main()
{
    xmlDoc *doc = NULL;
    xmlNode *root_element = NULL;

    LIBXML_TEST_VERSION 

    if( ( doc = xmlReadFile( XML_CFG_FILE, NULL, 0)) == NULL )
    {
        printf("error: could not parse file %s\n", XML_CFG_FILE);
        exit(-1);
    }

    root_element = xmlDocGetRootElement(doc);
    parse_xml(root_element);
    return 0;
}

我在输出下面得到这个。

Root Element LanguageStats
Current Element text Something is wrong

当我将逻辑更改为]时>

printf("\nRoot Element %s", root_node->name);
curr_node = root_node->children;
printf("\nCurrent Element %s", curr_node->name);
curr_node = curr_node->next;
printf("\nCurrent Element %s", curr_node->name);

我的输出变为

Root Element LanguageStats
Current Element text
Current Element Languages

我的问题是我缺少什么吗?还是libxml总是那样工作?这困扰着我很多,我无法解决。任何小技巧,将不胜感激

我正在尝试从程序中解析xml文件。我能够获取rootnode并成功打印其名称,属性等(无需费劲,只有api调用:))。但是,当我尝试读取其子节点时...

c libxml2
1个回答
0
投票

我想出了如何获得下一个元素。在这里,我附上代码片段

© www.soinside.com 2019 - 2024. All rights reserved.