TinyXML:将文档保存为 char * 或字符串

发布于 2024-07-05 23:40:05 字数 219 浏览 10 评论 0原文

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

看来文档的解析函数可以加载一个char *。 但是当我完成后,我需要将文档保存到 char * 中。 有人知道这件事吗?

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

编辑:打印很酷。

I'm attempting to use TinyXML to read and save from memory, instead of only reading and saving files to disk.

It seems that the documnent's parse function can load a char *. But then I need to save the document to a char * when I'm done with it. Does anyone know about this?

Edit: The printing & streaming functions aren't what I'm looking for. They output in a viewable format, I need the actual xml content.

Edit: Printing is cool.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

清醇 2024-07-12 23:40:09

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

#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* 缓冲区的函数。

Don't quite get what you are saying; your question is not clear. I'm guessing you are wanting to load a file into memory so that you can pass it to the document parse function. In that case, the following code should work.

#include <stdio.h>

The following code reads a file into memory and stores it in a buffer

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

The file is now in the variable "buffer" and can be passed to whatever function required you to provide a char* buffer of the file to it.

两人的回忆 2024-07-12 23:40:08

我不熟悉 TinyXML,但从文档看来,通过使用运算符 << 到 C++ 流(因此您可以使用 C++ 字符串流)或 TiXMLPrinter 类 您无需使用文件即可获取 STL 字符串。 请参阅 TinyXML 文档(查找“打印”部分)

I'm not familiar with TinyXML, but from the documentation it seems that by using operator << to a C++ stream (so you can use C++ string streams) or a TiXMLPrinter class you can get an STL string without using a file. See TinyXML documentation (look for the "Printing" section)

套路撩心 2024-07-12 23:40:08

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

A simple and elegant solution in TinyXml for printing a TiXmlDocument to a std::string.

I have made this little example

// 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();
水晶透心 2024-07-12 23:40:07

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

TiXmlDocument doc;
// populate document here ...

TiXmlPrinter printer;
printer.SetIndent( "    " );

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

Here's some sample code I am using, adapted from the TiXMLPrinter documentation:

TiXmlDocument doc;
// populate document here ...

TiXmlPrinter printer;
printer.SetIndent( "    " );

doc.Accept( &printer );
std::string xmltext = printer.CStr();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文