首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用QXmlQuery?(Qt XQuery/XPath)

如何正确使用QXmlQuery?(Qt XQuery/XPath)
EN

Stack Overflow用户
提问于 2010-04-22 03:22:15
回答 2查看 5.7K关注 0票数 5

我使用以下代码加载一个XML文件(实际上是一个NZB):

代码语言:javascript
复制
QXmlQuery query;
query.bindVariable("path", QVariant(path));

query.setQuery("doc($path)/nzb/file/segments/segment/string()");
if(!query.isValid())
    throw QString("Invalid query.");

QStringList segments;
if(!query.evaluateTo(&segments))
    throw QString("Unable to evaluate...");

QString string;
foreach(string, segments)
    qDebug() << "String: " << string;

通过以下输入,它可以按预期工作:

代码语言:javascript
复制
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE nzb PUBLIC "-//newzBin//DTD NZB 1.0//EN" "http://www.newzbin.com/DTD/nzb/nzb-1.0.dtd">
<nzb>
    <file>
        <groups>
            <group>alt.binaries.cd.image</group>
        </groups>
        <segments>
            <segment>waWdnZFHevdBeZTUnZ2dnUVZ8uOdnZ2d@giganews.com</segment>
        </segments>
    </file>
</nzb>

但是,使用以下输入不会返回任何结果。下面是输入的格式,带有属性:

代码语言:javascript
复制
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE nzb PUBLIC "-//newzBin//DTD NZB 1.0//EN" "http://www.newzbin.com/DTD/nzb/nzb-1.0.dtd">
<nzb xmlns="http://www.newzbin.com/DTD/2003/nzb">
    <file poster="test@test.test" date="1225385180" subject="ubuntu-8.10-desktop-i386 - ubuntu-8.10-desktop-i386.par2 (1/1)">
        <groups>
            <group>alt.binaries.cd.image</group>
        </groups>
        <segments>
            <segment bytes="66196" number="1">waWdnZFHevdBeZTUnZ2dnUVZ8uOdnZ2d@giganews.com</segment>
            <segment bytes="661967" number="1">waWdfhrgfnZFHevdBeZTUnZ2dnUVZ8uOdnZ2d@giganews.com</segment>
        </segments>
    </file>
</nzb>

有人能告诉我我哪里做错了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-22 05:59:20

我发现这是因为我需要提供一个默认的名称空间,这需要几个小时才能弄清楚……

查询现在是:

代码语言:javascript
复制
declare default element namespace "http://www.newzbin.com/DTD/2003/nzb";
declare variable $path external;
doc($path)/nzb/file/segments/segment/string()
票数 8
EN

Stack Overflow用户

发布于 2013-02-14 17:49:21

也许在查询中使用名称空间通配符?

代码语言:javascript
复制
doc($path)//*:file/*:segments/*:segment/string()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2685920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档