1

我正在使用 MiniXML 库在 C 中解析 XML 文件,但是当我尝试读取节点的值时,它返回 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。我一直在阅读文档,但我不知道我做错了什么。有没有人遇到过这个问题?

4

3 回答 3

2

尝试更改您的 for 循环以指定:

node->child->value.text.string

代替:

node->value.text.string

那样有用吗?这只是一个猜测,但我认为可能有必要获取“节点”元素的数据。

如果这不起作用,请查看C++: Trouble loading long string from XML file using Mini-XML。此人说他们需要使用 MXML_DESCEND_FIRST 而不是 MXML_DESCEND 来解决他们的问题。我不确定这对你的情况是否有帮助。

如果这些都不起作用,您也可以发布您的输入 XML,以便我们可以尝试重新创建您的问题。

于 2011-02-16T04:31:09.420 回答
1

我得到了同样的错误。感谢您发布的链接。我可以通过在 node->child->value.opaque 中更改 node->child->value.text.string 来修复错误。打开文件时无需更改任何内容,因为 type_cb 函数选择了正确的大小写。

于 2011-10-25T11:51:47.900 回答
0

Minixml 错误 502 - minixml mxmlLoad*() 函数无法使用 MXML_TEXT_CALLBACK 加载文本。要解决此问题,请定义并使用您自己的文本回调

于 2014-05-15T14:02:24.533 回答