使用QXmlQuery(Qt XQuery)时如何绑定名称空间前缀?

时间:2011-02-16 01:25:09

标签: c++ qt xquery

我正在尝试使用QXmlQuery对具有声明的默认命名空间的文档执行XQuery表达式。

讨论:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://namespace.com/ns1">
    <node1 attr1="hi"/>
</root>

现在,我有以下内容打开并查询文档:

QFile temp("my.xml");
temp.open(QIODevice::ReadOnly | QIODevice::Text);

QXmlQuery query;
query.setFocus(&temp);

QXmlResultItems items;
query.setQuery("/root");

query.evaluateTo(&items);

在运行此项时,'items'从不包含数据,因为文档是命名空间。当然,如果我删除默认的命名空间声明,'items'确实有正确的数据,但我没有那么奢侈。

我已经尝试将查询更改为:“/ prefix:root”,Qt会发出警告:

No namespace binding exists for the prefix prefix in prefix:root

所以命名空间绑定确实存在!但是哪里?我看到QXmlNamePool,但它没有mutator方法。我可以使用查询ala中的池创建一个QXmlName:

QXmlName name(query.namePool(), "prefix", "http://namespace.com/ns1");

但它没有改变任何东西。我很茫然,我使用过的其他工具包都有简单的方法将前缀绑定到名称空间URI。

1 个答案:

答案 0 :(得分:3)

我相信如果您将查询更改为

...
QXmlResultItems items;
query.setQuery("declare default element namespace \"http://namespace.com/ns1\"; /root");
...

它应该返回数据。

希望这有帮助,尊重