Mini-XML を使用して、プロジェクトのデータを保存および処理しています。
これはコードです:
#include <microxml.h>
int main()
{
FILE *fp;
mxml_node_t *tree, *data, *b;
int action_num1;
fp = fopen(FILE_PATH, "r");
if (fp!=NULL) {
tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK);
if (!tree) return -1;
fclose(fp);
}
else return -1;
data = mxmlFindElement(tree, tree, "first_node", NULL, NULL, MXML_DESCEND);
if (!data) goto error;
fp = fopen(FILE_PATH, "w");
if (fp!=NULL) {
b = mxmlNewElement(data, "action");
if (!b) goto error;
n = b;
b = mxmlNewElement(n, "action_number");
if (!b) goto error;
b = mxmlNewInteger(b, 123);
if (!b) goto error;
b = mxmlNewElement(n, "action_type");
if (!b) goto error;
b = mxmlNewInteger(b, 1);
if (!b) goto error;
mxmlSaveFile(tree, fp, MXML_NO_CALLBACK);
fclose(fp);
mxmlDelete(tree);
return 0;
}
fp = fopen(FILE_PATH, "r");
if (fp!=NULL) {
tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK);
if (!tree) return -1;
fclose(fp);
}
else return -1;
data = mxmlFindElement(tree, tree, "first_node", NULL, NULL, MXML_DESCEND);
if (!data) goto error;
b = data;
while (b) {
if (b->type == MXML_ELEMENT &&
!strcmp(b->value.element.name, "action")) {
c = mxmlFindElement(b, b, "action_number",NULL, NULL, MXML_DESCEND);
if (!c) goto error1;
if(c->type == MXML_ELEMENT &&
c->child
c->child->type == MXML_INTEGER) {
action_num1 = mxmlGetInteger(c); `// **===> get integer value**`
}
}
b = mxmlWalkNext(b, data, MXML_DESCEND);
}
error:
close(fp);
mxmlDelete(tree);
return -1;
error1:
mxmlDelete(tree);
return -1;
}
問題は、整数値を取得すると値が0になることです(「action_number」の値を取得しないでください)。mxmlGetText 関数を使用して文字列値を処理する場合、この問題は発生しません。