Разбор XML-файла в C с использованием MiniXML - PullRequest
1 голос
/ 20 августа 2010

Я использую библиотеку MiniXML для анализа XML-файла в C, однако, когда я пытаюсь прочитать значение узла, он возвращает NULL.

Вот код:

FILE *fp;
mxml_node_t *tree;

fp = fopen("test.xml", "r");
tree = mxmlLoadFile(NULL, fp, MXML_TEXT_CALLBACK);
fclose(fp);

mxml_node_t *node;
for(node = mxmlFindElement(tree, tree,"node",NULL, NULL,MXML_DESCEND);
     node != NULL;
     node = mxmlFindElement(node, tree,"node",NULL, NULL, MXML_DESCEND)) {
  printf("Text: %s\n", node->value.text.string);
}

Проблема в том, что node-> value.text.string имеет значение NULL. Я читал документацию, и я не знаю, что я делаю не так. Кто-нибудь сталкивался с этой проблемой раньше?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2011

Попробуйте изменить цикл for, указав:

node->child->value.text.string

вместо:

node->value.text.string

Это работает?Это всего лишь предположение, но я думаю, что может понадобиться получить данные для элементов «узла».

Если это не сработает, посмотрите на C ++: проблема при загрузке длинной строки из файла XML с использованием Mini-XML .Этот человек говорит, что им нужно использовать MXML_DESCEND_FIRST вместо MXML_DESCEND, чтобы решить их проблему.Я не уверен, поможет ли это в вашем случае.

Если ни один из этих способов не работает, вы также можете опубликовать свой входной XML, чтобы мы могли попытаться воссоздать вашу проблему.

1 голос
/ 25 октября 2011

Я получил ту же ошибку. Спасибо за ссылку, которую вы разместили. Я могу исправить ошибку, изменив node-> child-> value.text.string в node-> child-> value.opaque. нечего менять при открытии файла, потому что функция type_cb выбирает правильный регистр.

0 голосов
/ 15 мая 2014

Ошибка Minixml 502 - функциям minixml mxmlLoad * () не удается загрузить текст с MXML_TEXT_CALLBACK.Чтобы обойти, определите и используйте свой собственный текстовый обратный вызов

...