2008-09-21 21 views
14

Estoy intentando utilizar TinyXML para leer y guardar en la memoria, en lugar de solamente leer y guardar archivos en el disco.TinyXML: Guardar documento a char * o cadena

Parece que la función de análisis de 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 transmisión de impresión & no son lo que estoy buscando. Muestran en un formato visible, necesito el contenido xml real.

Editar: La impresión es genial.

Respuesta

10

no estoy familiarizado con TinyXML, pero a partir de la documentación parece que mediante el uso del operador < < a una corriente de C++ (para que pueda utilizar C++ string streams) o una TiXMLPrinter class se puede obtener una cadena STL sin utilizar un archivo. Ver TinyXML documentation (busque la sección "impresión")

0

No entiendo muy bien lo que dice; 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 una memoria intermedia

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 se encuentra ahora en la variable "buffer" y se puede pasar a cualquier función que se requiere para proporcionar una char * buffer del archivo a la misma.

+1

Lo siento, no estaba claro, editado. Ya estoy usando la función de análisis sintáctico, el problema es guardar el documento en un puntero de char después de que se haya cargado. – foobar

12

Una solución sencilla y elegante en TinyXML para imprimir un TiXmlDocument a un 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(); 
21

He aquí algunos ejemplos de código que estoy usando, una adaptación de la documentación TiXMLPrinter:

TiXmlDocument doc; 
// populate document here ... 

TiXmlPrinter printer; 
printer.SetIndent(" "); 

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