【问题标题】:Parsing a XML file in C using MiniXML使用 MiniXML 在 C 中解析 XML 文件
【发布时间】:2010-08-20 13:18:27
【问题描述】:

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

【问题讨论】:

    标签: c xml parsing mini-xml


    【解决方案1】:

    尝试更改您的 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,以便我们可以尝试重现您的问题。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2021-03-27
          • 2013-05-29
          • 2015-03-14
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          • 2013-07-22
          • 1970-01-01
          相关资源
          最近更新 更多