Я пытаюсь проанализировать файл xml из моей программы. Я могу получить корневой узел и напечатать его имя, свойство et c. успешно (без тяжелой работы, только вызов 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
Когда я изменяю лог c на
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
Мой вопрос: я что-то упустил? или lib xml всегда так работает? Это беспокоит меня, и я не могу решить это. Любые небольшие советы будут оценены