TinyXML: сохранить документ в символ * или строку - PullRequest
14 голосов
/ 21 сентября 2008

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

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

Редактировать: функции печати и потоковой передачи не то, что я ищу. Они выводятся в видимом формате, мне нужно фактическое содержание XML.

Редактировать: Печать классная.

Ответы [ 4 ]

22 голосов
/ 12 мая 2009

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

TiXmlDocument doc;
// populate document here ...

TiXmlPrinter printer;
printer.SetIndent( "    " );

doc.Accept( &printer );
std::string xmltext = printer.CStr();
13 голосов
/ 28 декабря 2008

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

Я не знаком с TinyXML, но из документации видно, что с помощью оператора << для потока C ++ (так что вы можете использовать <a href="http://www.cppreference.com/wiki/io/sstream/start" rel="noreferrer"> потоков C ++ ) или TiXMLPrinter класс вы можете получить строку STL без использования файла. См. Документация TinyXML (см. Раздел «Печать»)

0 голосов
/ 21 сентября 2008

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

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

...