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 回答