tinyxml2怎么实现序列化
时间: 2023-11-28 14:48:55 浏览: 109
tinyxml2是一个轻量级的XML解析库,它本身并没有提供序列化功能。但可以通过使用tinyxml2提供的API将对象的数据保存到XML文件中,达到类似序列化的效果。
以下是一个示例代码,演示如何使用tinyxml2实现对象的序列化:
```cpp
#include "tinyxml2.h"
#include <iostream>
using namespace std;
using namespace tinyxml2;
class Person {
public:
string name;
int age;
float height;
void SaveToXml(XMLElement* parent) {
// 创建一个名为 "person" 的XML元素
XMLElement* personElement = parent->GetDocument()->NewElement("person");
// 添加 "name" 属性
personElement->SetAttribute("name", name.c_str());
// 添加 "age" 子元素
XMLElement* ageElement = parent->GetDocument()->NewElement("age");
ageElement->SetText(age);
personElement->InsertEndChild(ageElement);
// 添加 "height" 子元素
XMLElement* heightElement = parent->GetDocument()->NewElement("height");
heightElement->SetText(height);
personElement->InsertEndChild(heightElement);
// 将 "person" 元素添加到父元素中
parent->InsertEndChild(personElement);
}
void LoadFromXml(XMLElement* parent) {
// 从 "name" 属性获取名字
const char* nameAttr = parent->Attribute("name");
if (nameAttr) {
name = nameAttr;
}
// 从 "age" 子元素获取年龄
XMLElement* ageElement = parent->FirstChildElement("age");
if (ageElement) {
age = ageElement->IntText();
}
// 从 "height" 子元素获取身高
XMLElement* heightElement = parent->FirstChildElement("height");
if (heightElement) {
height = heightElement->FloatText();
}
}
};
int main() {
// 创建一个XML文档
XMLDocument doc;
// 创建一个根元素
XMLElement* root = doc.NewElement("root");
doc.InsertEndChild(root);
// 创建一个Person对象
Person person;
person.name = "Tom";
person.age = 20;
person.height = 1.75f;
// 将Person对象保存到XML文件中
person.SaveToXml(root);
// 将XML文档保存到文件中
doc.SaveFile("person.xml");
// 从XML文件中加载Person对象
XMLDocument doc2;
doc2.LoadFile("person.xml");
XMLElement* root2 = doc2.RootElement();
Person person2;
person2.LoadFromXml(root2->FirstChildElement("person"));
// 打印加载的Person对象的属性
cout << "Name: " << person2.name << endl;
cout << "Age: " << person2.age << endl;
cout << "Height: " << person2.height << endl;
return 0;
}
```
在上述代码中,Person类实现了SaveToXml和LoadFromXml两个方法。SaveToXml方法将Person对象的数据保存到XML文件中,LoadFromXml方法从XML文件中加载Person对象的数据。这里只是实现了一个简单的例子,如果需要更复杂的序列化和反序列化功能,需要根据具体情况进行定制。
阅读全文