使用MiniXML在C中解析XML文件

时间:2010-08-20 13:18:27

标签: c xml parsing mini-xml

我正在使用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。我一直在阅读文档,我不知道我做错了什么。有没有人遇到过这个问题?

3 个答案:

答案 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加载文本。 要解决此问题,请定义并使用您自己的文本回调