0

の形式の XML を生成したいのですが、

<Library>
<ConfigParams>
   <parameter name= "name1"> abc </parameter>
   <parameter name= "name2"> def </parameter>
</ConfigParams>
<Books>
 <Book>
    <name>xyz</name>
    <title>jlkjlkj</title>
     <Parameters>
         <parameter name= "name3">name1 </parameter>
         <parameter name= "name4"> name4 </parameter>
     </Parameters>
  </Book>
   <Book>
       <name>xyzkjk</name>
    <title>jlj</title>
     <Parameters>
         <parameter name= "name8">name22 </parameter>
         <parameter name= "name7"> name44 </parameter>
     </Parameters>
    </Book>
</Books>
</Library>

このために、TinyXML を使用することにしました。

次のクラスを作成しました。

 class Param
 { 
  public:
    string value;
string name;

Param();

Param( string value, string name)
{ 
  this->value=value;
  this->name=name;
}

  };


class Parameters
{
public:
list<Param> param;

Parameters();
Parameters(list<Param> param)
 {
     this->param = param;
 }

};


class Book
{
public:
string name;
string title;
Parameters parameters;

Book();
Book(string name, string title, Parameters parameters)
{
     this->name = name;
     this->title = title;
     this->parameters = parameters;
}
};


class Books
{
public:
list<Book> books;

Books();
Books(list<Book> books)
{ 
    this->books = books;
}
};


class Library
{
public:
Parameters configParams;
Books books;

Library();
Library(Parameters configparams, Books books)
{
    this->configParams=configparams;
    this->books=books;
}

void save(const char* Filename);
};

class ConfigParams
{
public:
Parameters configparams;

ConfigParams();
ConfigParams(Parameters configparams)
{
    this->configparams = configparams;
}
};

さて、このクラス階層の Xml ドキュメントを生成したいときは、

void Library::save(const char* Filename)
{

TiXmlDocument doc;  
TiXmlElement* msg;

TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );  
doc.LinkEndChild( decl ); 

TiXmlElement * root = new TiXmlElement("Library");  
doc.LinkEndChild( root );  

//block configparams
{
TiXmlElement * configparams= new TiXmlElement( "ConfigParams" );  
    root->LinkEndChild( configparams ); 

    Param param1=Param("name1", "abc");
    Param param2=Param("name2" ,"def");


 list<Param> params =list<Param>();
 list <Param>::iterator Iter;

 Iter=params.begin();
 params.insert(Iter,param1);
 params.insert(Iter,param2);

 Parameters parameters=Parameters(params);

 ConfigParams configparams=ConfigParams(parameters);

しかし、TinyXml を使用してこれらのクラスを XML 形式に追加する方法がわかりません。

4

1 に答える 1

0

TinyXML は、DOM ベースの XML パーサー/ツールキットです。XML をディスク上のファイルに保存するには、DOM、つまり XML のメモリ内表現を作成する必要があります。こちらの TinyXML チュートリアル、特に「ドキュメントをファイルに書き込む」というタイトルの例をご覧になることをお勧めします。

saveシリアル化する必要があるすべてのクラスに仮想メンバー関数を追加し、 ofstream. ここで、誰かがファイル ストリームを開いて、それをクラス オブジェクトに渡す必要があります。Libraryクラス オブジェクトは、そのメンバー情報をストリームに書き込み、重要なメンバー (つまり、'Param' など) ごとにsave関数を呼び出します。メンバーに。そのため、最終的には、各ビルディング ブロックが独自の情報を出力する場所を保存する一連の呼び出しがチェーン化されます。

ユーザークラスの実装方法を見てoperator<<、始めることができます!

于 2012-04-24T09:32:58.497 に答える