2008-09-21 17 views
14

Próbuję użyć TinyXML do odczytu i zapisywania z pamięci, zamiast tylko odczytywać i zapisywać pliki na dysku.TinyXML: Zapisz dokument na char * lub ciąg

Wygląda na to, że funkcja analizy documenta może załadować znak *. Ale potem muszę zapisać dokument na znak *, gdy skończę. Czy ktoś o tym wie?

Edytuj: Funkcje przesyłania strumieniowego & nie są tym, czego szukam. Są one wyświetlane w formacie widocznym, potrzebuję rzeczywistej zawartości XML.

Edytuj: Drukowanie jest fajne.

Odpowiedz

0

Nie całkiem rozumiesz, co mówisz; twoje pytanie nie jest jasne. Zgaduję, że chcesz załadować plik do pamięci, abyś mógł go przekazać do funkcji parsowania dokumentu. W takim przypadku powinien działać następujący kod.

#include <stdio.h> 

Poniższy kod odczytuje plik do pamięci i przechowuje je w buforze

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

plik jest teraz w zmiennej „bufor” i mogą być przekazywane do cokolwiek funkcja wymagana do dostarczenia char * bufor pliku do niego.

+1

Przepraszam, że nie było jasne, edytować. Już używam funkcji parsowania, problem polega na zapisaniu dokumentu z powrotem na wskaźniku znaków po jego załadowaniu. – foobar

12

Proste i eleganckie rozwiązanie w TinyXml do drukowania TiXmlDocument na std :: string.

Zrobiłem ten mały przykład

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

Oto niektóre przykładowy kod używam, zaadaptowany z dokumentacją TiXMLPrinter:

TiXmlDocument doc; 
// populate document here ... 

TiXmlPrinter printer; 
printer.SetIndent(" "); 

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