TinyXML: Сохранить документ до char * или строки

Я пытаюсь использовать TinyXML для чтения и сохранения из памяти, а не только для чтения и сохранения файлов на диск.

Кажется, что функция parse documnent может загрузить char *. Но тогда мне нужно сохранить документ до char *, когда я закончил с ним. Кто-нибудь знает об этом?

Изменить: функции печати и потоковой передачи - это не то, что я ищу. Они выводятся в видимом формате, мне нужен фактический xml-контент.

Правка: печать прохладная.

Ответы

Ответ 1

Я не знаком с TinyXML, но из документации кажется, что, используя оператор < < к потоку С++ (так что вы можете использовать строковые потоки С++) или TiXMLPrinter class вы можете получить строку STL без использования файла. См. Документация TinyXML (найдите раздел "Печать" )

Ответ 2

Вот пример кода, который я использую, адаптированный из документа TiXMLPrinter:

TiXmlDocument doc;
// populate document here ...

TiXmlPrinter printer;
printer.SetIndent( "    " );

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

Ответ 3

Простое и элегантное решение в 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();

Ответ 4

Не совсем понимаю, что вы говорите; ваш вопрос непонятен. Я предполагаю, что вы хотите загрузить файл в память, чтобы передать его в функцию анализа текста. В этом случае должен работать следующий код.

#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 * файла.