我正在尝试使用TinyXML从内存中读取和保存,而不是仅将文件读取并保存到磁盘。
似乎documnent的解析函数可以加载char *。但是当我完成它之后,我需要将文档保存到char *。有谁知道这个?
编辑:印刷&流媒体功能不是我想要的。它们以可视格式输出,我需要实际的xml内容。
编辑:打印很酷。
答案 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 *缓冲区。