在C ++和Qt中使用未知元素解析XML

时间:2014-02-04 09:38:56

标签: c++ xml qt

我有一个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
}

0 个答案:

没有答案