2012-04-24 64 views
0

我要生成的格式的XML C++類,XML生成使用TinyXML的

<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表單中?

回答

0

TinyXML是一個基於DOM的XML解析器/工具包。爲了將XML保存到磁盤上的文件中,您需要創建一個DOM,即XML的內存中表示。我建議你看看TinyXML教程here,特別是標題爲「將文檔寫入文件」的例子。

您可以將虛擬成員save函數添加到需要序列化的所有類,並將它們傳遞給ofstream的引用。現在,您需要讓某人打開一個文件流並將其傳遞給類對象,該對象將向流中寫入其成員信息,然後對每個非平凡成員(即類型說'Param')將調用save功能在成員上。所以,你最終得到的是一組鏈接調用,以保存每個構建塊負責輸出其自己的信息的位置。

你可以看看operator<<爲用戶類實現的方式並獲得開始!

+0

我看到了,我想問如何將類作爲XML元素進行合併。寫入文檔是我所知道的。 如何將configparams對象添加到XML元素中? – bogusbonafide 2012-04-24 09:37:11

+0

@bogusbonafide:請參閱我的編輯以前的答案。 – dirkgently 2012-04-24 09:43:46

+0

當我運行我的程序時,我得到likner錯誤我不知道爲什麼 我已經包含tinyxml.h在VC的包含文件夾。儘管如此,它給我的鏈接器錯誤。你能幫我嗎 ? – bogusbonafide 2012-04-25 05:35:55