2008-09-21 3 views
14

Ich versuche TinyXML zu verwenden, um aus dem Speicher zu lesen und zu speichern, anstatt nur Dateien auf der Festplatte zu lesen und zu speichern.TinyXML: Dokument in Zeichen * oder Zeichenfolge speichern

Es scheint, dass die Parsefunktion des Dokuments einen Char * laden kann. Aber dann muss ich das Dokument in einem char * speichern, wenn ich damit fertig bin. Weiß jemand davon?

Edit: Die Druckfunktionen & Streaming-Funktionen sind nicht das, was ich suche. Sie geben in einem anzeigbaren Format aus, ich brauche den tatsächlichen XML-Inhalt.

Bearbeiten: Drucken ist cool.

Antwort

10

bin ich mit TinyXML nicht vertraut, aber aus der Dokumentation scheint es, dass durch den Bediener < < zu einem C++ Stream unter Verwendung von (so können Sie C++ string streams verwenden) oder ein TiXMLPrinter class können Sie ein STL-String erhalten, ohne eine Datei. Siehe TinyXML documentation (siehe Abschnitt "Drucken")

0

Nicht ganz bekommen, was Sie sagen; Ihre Frage ist nicht klar. Ich schätze, Sie möchten eine Datei in den Speicher laden, damit Sie sie an die Dokumentanalyse übergeben können. In diesem Fall sollte der folgende Code funktionieren.

#include <stdio.h> 

Der folgende Code liest eine Datei in den Speicher und speichert sie in einem Puffer

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); 

Die Datei ist nun in die Variable „Puffer“ und kann übergeben werden, was Funktion, die Sie benötigt eine schaffen Char * Puffer der Datei zu ihm.

+1

Leider habe ich nicht klar war, herausgegeben. Ich verwende bereits die Parse-Funktion, das Problem besteht darin, das Dokument nach dem Laden in einen Char-Zeiger zu speichern. – foobar

12

Eine einfache und elegante Lösung in TinyXml zum Drucken eines TiXmlDocument in eine std :: string.

ich dieses kleine Beispiel

// 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

Hier gemacht haben einige Beispiel-Code, den ich verwende, aus der Dokumentation TiXMLPrinter angepasst:

TiXmlDocument doc; 
// populate document here ... 

TiXmlPrinter printer; 
printer.SetIndent(" "); 

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