我正在使用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。我一直在阅读文档,我不知道我做错了什么。有没有人遇到过这个问题?
答案 0 :(得分: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,以便我们可以尝试重新创建您的问题。
答案 1 :(得分:1)
我得到了同样的错误。感谢您发布的链接。我可以通过改变来修复错误 node-> child-> value.text.string in node-> child-> value.opaque。 打开文件时无需更改,因为type_cb函数选择了正确的大小写。
答案 2 :(得分:0)
Minixml bug 502 - minixml mxmlLoad *()函数无法使用MXML_TEXT_CALLBACK加载文本。 要解决此问题,请定义并使用您自己的文本回调