14

ファイルを読み取ってディスクに保存するだけでなく、TinyXML を使用してメモリから読み取って保存しようとしています。

ドキュメントの解析関数は char * をロードできるようです。しかし、作業が終わったら、ドキュメントを char * に保存する必要があります。誰もこれについて知っていますか?

編集:印刷とストリーミング機能は、私が探しているものではありません。それらは表示可能な形式で出力されます。実際の xml コンテンツが必要です。

編集:印刷はクールです。

4

4 に答える 4

22

TiXMLPrinterのドキュメントを基に、私が使用しているサンプル コードを次に示します。

TiXmlDocument doc;
// populate document here ...

TiXmlPrinter printer;
printer.SetIndent( "    " );

doc.Accept( &printer );
std::string xmltext = printer.CStr();
于 2009-05-12T15:49:14.177 に答える
15

TiXmlDocument を std::string に出力するための TinyXml のシンプルでエレガントなソリューション。

私はこの小さな例を作りました

// 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();
于 2008-12-27T21:37:48.230 に答える
10

私は TinyXML に詳しくありませんが、ドキュメントから、オペレータ << を C++ ストリーム ( C++ 文字列ストリームを使用できるように) に使用するか、TiXMLPrinter クラスを使用すると、ファイルを使用せずに STL 文字列を取得できるようです。TinyXML のドキュメントを参照してください(「印刷」セクションを探してください)。

于 2008-09-21T06:56:25.913 に答える
0

あなたの言っていることはよくわかりません。あなたの質問は明確ではありません。ドキュメント解析関数に渡すことができるように、ファイルをメモリにロードしたいと思っていると思います。その場合、次のコードが機能するはずです。

#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* バッファーを提供する必要がある関数に渡すことができます。

于 2008-09-21T06:43:39.127 に答える