将QXmlItem转换为QtDomElement或类似的?

时间:2010-03-11 23:38:03

标签: c++ xml qt qtxml

我正在解析一个相当复杂的以下结构的XML文件:

<root>
...
...
<item>
<subitem id="1"/>
<text>
text1
</text>
</item>
<item>
<subitem id="2"/>
<text>
text2
</text>
</item>
...
<item>
...
</item>
...
</root>

这很粗糙,但我希望你得到我的漂移。我主要对“item”节点感兴趣。所以我写了下面的代码(直接来自Qt的在线手册):

QXmlQuery query;
query.setQuery("//item/");

QXmlResultItems result;
query.evaluateTo(&result);

QXmlItem item(result.next());
while (!item.isNull()) 
{
  if (item.isNode())
  {
      // WHAT DO I DO NOW?
  }
  item = result.next();
}

现在,QXmlItem似乎代表两个概念,一个文字值(如字符串)或一个Node(这是item.isNode()正在做的事情)。不幸的是,我无法掌握如何将QXmlItem转换为可再次查询的内容。特别是从上面的例子中我想获取“id”属性和文本元素。我可以使用XQuery方法做到这一点,还是我离开这里?

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用QXmlItem修改查询的焦点。例如:

QXmlItem item(result.next());
while (!item.isNull()) 
{
  if (item.isNode())
  {
    query.setFocus(item);
    query.setQuery("./text/string()");
    QString text;
    query.evaluateTo(&text);
  }
  item = result.next();
}

将检索<text>的{​​{1}}值。

答案 1 :(得分:2)

QXmlQuery是一个令人讨厌的Qt文档,但我会说你写了你的查询以返回你真正想要的项目,即(这是一个没有受过教育的猜测)

query.setQuery("//item/subitem | //item/text");

W3Schools有一个可能有帮助的Tutorial on XPath