c++ - TinyXML: guarda el documento en char*o cadena
(4)
No entiendas lo que dices; tu pregunta no está clara. Supongo que quiere cargar un archivo en la memoria para poder pasarlo a la función de análisis de documentos. En ese caso, el siguiente código debería funcionar.
#include <stdio.h>
El siguiente código lee un archivo en la memoria y lo almacena en un búfer
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);
El archivo ahora está en la variable "buffer" y se puede pasar a cualquier función que requiera para proporcionarle un búfer char * del archivo.
Estoy intentando utilizar TinyXML para leer y guardar desde la memoria, en lugar de solo leer y guardar archivos en el disco.
Parece que la función de análisis del documnent puede cargar un char *. Pero luego tengo que guardar el documento en un char * cuando haya terminado con él. ¿Alguien sabe sobre esto?
Editar: Las funciones de impresión y transmisión no son lo que estoy buscando. Muestran en un formato visible, necesito el contenido xml real.
Editar: la impresión es genial.
Aquí hay un código de muestra que estoy usando, adaptado de la documentación de TiXMLPrinter :
TiXmlDocument doc;
// populate document here ...
TiXmlPrinter printer;
printer.SetIndent( " " );
doc.Accept( &printer );
std::string xmltext = printer.CStr();
Una solución simple y elegante en TinyXml para imprimir un TiXmlDocument en std :: string.
He hecho este pequeño ejemplo
// 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();
No estoy familiarizado con TinyXML, pero a partir de la documentación parece que al usar operator << a una secuencia de C ++ (para que pueda usar flujos de cadenas C ++ ) o una clase TiXMLPrinter puede obtener una cadena STL sin usar un archivo. Consulte la documentación de TinyXML (busque la sección "Impresión")