如何解决C++ 将 XML 节点转换为对象
我想将 XML 节点从文件转换为对象。 我正在寻找最简单、更有效的方法。 理想情况下,我想使用 RapidXML 库。
它应该根据xml节点填充对象,并且对于许多不同的对象。 但是,我不知道该怎么做,所以我来这里寻求帮助。
这是一个 MWE:
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <vector>
#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"
using namespace std;
using namespace rapidxml;
class SuperParentClass
{
private:
/* data */
public:
std::string nameClass;
virtual int run() = 0;
};
class ChildClassRectangle : public SuperParentClass
{
private:
/* data */
public:
double length=0.;
double width=0.;
vector<double> point;
virtual int run() override
{
std::cout << "I am a Rectangle" << std::endl;
return 0;
}
};
class ChildClassTriangle : public SuperParentClass
{
private:
/* data */
public:
double hight=0.;
double base=0.;
vector<double> point;
virtual int run() override
{
std::cout << "I am a Triangle" << std::endl;
return 0;
}
};
class ChildClassCircle : public SuperParentClass
{
private:
/* data */
public:
double radius=0.;
vector<double> point;
virtual int run() override
{
std::cout << "I am a Circle" << std::endl;
return 0;
}
};
int main(void)
{
cout << "(Start)" << endl;
rapidxml::file<> xmlFile("Input.xml");
rapidxml::xml_document<> doc;
doc.parse<0>(xmlFile.data());
SuperParentClass *shape;
cout << "Parsing my XML file" << endl;
// Iterate over the input_node packs.
for (xml_node<> * input_node = doc.first_node(); input_node != NULL; input_node = input_node->next_sibling())
{
// Get name and type of the inputPack node.
string nameNode= input_node->name();
cout << "Name "<< nameNode << endl;
// convertXML2object(input_node,shape)
// shape.run()
}
// End of the main.
cout << "(End) " << endl;
return 0;
}
我的 input.xml
文件是:
<?xml version="1.0" encoding="UTF-8"?>
<Triangle name="tri1" type="rectangle">
<hight val="1.0"/>
<base val="2.0"/>
<point val="(0.0,1.0)"/>
</Triangle>
<Circle name="Cir1" radius="2.0" point="(1.0,2.2)"/>
<Rectangle name="Rec1">
<length val="4.0"/>
<width val="2.0"/>
<point val="(3.0,1.0)"/>
</Rectangle>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。