我正在解析一个相当复杂的以下结构的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方法做到这一点,还是我离开这里?
有什么建议吗?
谢谢!
答案 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