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 ++を参照してください:Mini-XMLを使用してXMLファイルから長い文字列をロードする際の問題。この人は、問題を解決するためにMXML_DESCENDの代わりにMXML_DESCEND_FIRSTを使用する必要があると言います。それがあなたの場合に役立つかどうかはわかりません。

これらのいずれも機能しない場合は、入力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-minixmlmxmlLoad*()関数は、MXML_TEXT_CALLBACKを使用してテキストをロードできません。回避するには、独自のテキストコールバックを定義して使用します

于 2014-05-15T14:02:24.533 に答える