我有一个XML文档,我从一个我希望解析的REST服务中收到这个文档。该服务可能会更改其元素和标记名称,因此我尝试提出一些完全通用的解决方案,将文档结构保存为某种具有属性的对象。
我不确定C ++和Qt API如何允许我完成这样的事情。我曾想过创建某种键控映射,它可以将元素名称保存为字符串键,值将以一些递归的方式作为它们的子元素。作为Qt和C ++的新手,我不知道如何才能实现这一点。
这可能是一个示例XML文档:
<root>
<element id="1">
<name>SomeName</name>
<desc>SomeDesc</desc>
<params>
<param pid="1">True</param>
<param pid="2">False</param>
</params>
...
<Some unknown element></Some unknown element>
</element>
</root>
这就是我将HTTP响应( QNetworkReply )转换为我可以在Qt中使用的DOM文档的方式:
QByteArray data = reply->readAll();
QDomDocument doc;
doc.setContent(data);
QDomNodeList nodes = doc.elementsByTagName("root");
if (nodes.size() > 0) {
// Prints all elements, should be able to save in a map somehow? Perhaps there is a better way?
qDebug() << nodes.at(0).toElement().text();
}
我希望能够以一种方式解析这一点,这样我就可以在不知道元素,属性和标记名称的情况下将所有信息保存在XML中。像这样:
element = {
id : 1,
name : 'SomeName',
desc : 'SomeDesc',
params : [{
pid : 1,
param : True
}, {
pid : 2,
param : False
}
],
some unknown element : some unknown values
}