TinyXML:将文档保存为char *或string

时间:2008-09-21 06:27:12

标签: c++ tinyxml

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

似乎documnent的解析函数可以加载char *。但是当我完成它之后,我需要将文档保存到char *。有谁知道这个?

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

编辑:打印很酷。

4 个答案:

答案 0 :(得分:22)

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

TiXmlDocument doc;
// populate document here ...

TiXmlPrinter printer;
printer.SetIndent( "    " );

doc.Accept( &printer );
std::string xmltext = printer.CStr();

答案 1 :(得分:13)

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();

答案 2 :(得分:10)

我不熟悉TinyXML,但从文档中可以看出,通过使用运算符<<到C ++流(因此您可以使用C++ string streams)或TiXMLPrinter class,您可以在不使用文件的情况下获取STL字符串。请参阅TinyXML documentation(查找“打印”部分)

答案 3 :(得分: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);

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