14

我正在尝试使用 TinyXML 从内存中读取和保存,而不仅仅是读取文件并将其保存到磁盘。

似乎文档的 parse 函数可以加载一个 char *. 但是,当我完成它时,我需要将文档保存到 char * 中。有人知道吗?

编辑:打印和流媒体功能不是我想要的。它们以可查看的格式输出,我需要实际的 xml 内容。

编辑:打印很酷。

4

4 回答 4

22

这是我正在使用的一些示例代码,改编自TiXMLPrinter文档:

TiXmlDocument doc;
// populate document here ...

TiXmlPrinter printer;
printer.SetIndent( "    " );

doc.Accept( &printer );
std::string xmltext = printer.CStr();
于 2009-05-12T15:49:14.177 回答
15

TinyXml 中一个简单而优雅的解决方案,用于将 TiXmlDocument 打印到 std::string。

我做了这个小例子

// Create a TiXmlDocument    
TiXmlDocument *pDoc =new TiXmlDocument("my_doc_name");

// Add some content to the document, you might fill in something else ;-)    
TiXmlComment*   comment = new TiXmlComment("hello world" );    
pDoc->LinkEndChild( comment );

// Declare a printer    
TiXmlPrinter printer;

// attach it to the document you want to convert in to a std::string 
pDoc->Accept(&printer);

// Create a std::string and copy your document data in to the string    
std::string str = printer.CStr();
于 2008-12-27T21:37:48.230 回答
10

我不熟悉 TinyXML,但从文档看来,通过将 operator << 用于 C++ 流(因此您可以使用C++ 字符串流)或TiXMLPrinter 类,您可以在不使用文件的情况下获取 STL 字符串。请参阅TinyXML 文档(查找“打印”部分)

于 2008-09-21T06:56:25.913 回答
0

不太明白你在说什么;你的问题不清楚。我猜您想将文件加载到内存中,以便您可以将其传递给文档解析函数。在这种情况下,以下代码应该可以工作。

#include <stdio.h>

以下代码将文件读入内存并将其存储在缓冲区中

FILE* fd = fopen("filename.xml", "rb"); // Read-only mode
int fsize = fseek(fd, 0, SEEK_END); // Get file size
rewind(fd);
char* buffer = (char*)calloc(fsize + 1, sizeof(char));
fread(buffer, fsize, 1, fd);
fclose(fd);

该文件现在位于变量“缓冲区”中,并且可以传递给任何需要您向其提供文件的 char* 缓冲区的函数。

于 2008-09-21T06:43:39.127 回答