我正试图使用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);
在运行这个过程中,项目中永远不会有数据,因为文档是按名称命名的。当然,如果我删除默认的名称空间声明,项确实有正确的数据,但我没有这种奢侈。
我试着将查询更改为:“/prefix:root”,Qt发出如下警告:
No namespace binding exists for the prefix prefix in prefix:root
所以命名空间绑定确实存在!但是在哪里?我看到了QXmlNamePool,但它没有赋值函数方法。我可以通过查询ala创建一个带有池的QXmlName:
QXmlName name(query.namePool(), "prefix", "http://namespace.com/ns1");
但它并没有改变任何事情。我不知所措,我使用的其他工具包都有将前缀绑定到命名空间URI的简单方法。