使用TinyXML解析XML文件字符串

时间:2014-04-08 17:59:18

标签: c++ xml tinyxml

我有一个库,其中包含一个默认的XML文件,表示为const char *逐字节存储。

我希望用户能够请求此文件的句柄(作为TiXmlDocument)。

目前,我试图通过将此字符串defaultFile(在其自己的头文件中定义)传递给TiXmlDocument.Parse()来实现此目的。 Parse()正在向我传回一个垃圾指针(但不是null),这会导致尝试调用SaveFile()时崩溃。

我可以通过使用以下方法将相同的defaultFile写入文件来解决此问题:

FILE *file;
file = fopen("temp.prme", "w");
fprintf(file, "%s", defaultParameterFile);
fclose(file);

我使用构造函数创建一个新的TiXmlDocument,该构造函数将文件路径作为输入。这有效,但它不是一个真正的选择,因为我不想将文件保存到用户机器。

据我所知,所有构造函数都在从文件中读取字符串,然后直接发送到Parse()。我检查了内存中传递的值,发现差异很小。

使用构造函数方法时,必须事后调用LoadFile()。在LoadFile()中,传递给Parse()的字符串未终止。即使defaultFile是。此外,所有新行(defaultFile中列为/r/n的行)都列为\n\n

我尝试修改defaultFile以匹配我从构造函数中看到的内容,并且没有运气。有什么建议吗?

为了它的价值,defaultFile大致如下:

const char defaultFile[] = {
/* 0x00000000 */   0x3C, 0x3F, 0x78, 0x6D,
...
};

它大约有9000行,每行16个字节。

1 个答案:

答案 0 :(得分:0)

直接调用Parse()时,我在堆栈上分配TiXmlDocument。其他函数调用正在破坏数据。我解决了这一切,一切正常。