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