首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Oxygen XQuery实现选择XML属性;Oxygen XPath发出结果

无法使用Oxygen XQuery实现选择XML属性;Oxygen XPath发出结果
EN

Stack Overflow用户
提问于 2015-06-06 04:40:32
回答 1查看 447关注 0票数 2

我了解到每个Xpath表达式也都是有效的Xquery表达式。我在这个示例XML中使用Oxygen 16.1:

代码语言:javascript
复制
<actors>
    <actor filmcount="4" sex="m" id="15">Anderson, Jeff</actor>
    <actor filmcount="9" sex="m" id="38">Bishop, Kevin</actor>
</actors>

我的表达式是:

代码语言:javascript
复制
//actor/@id

当我用Xpath 3.0在氧气中计算这个表达式时,我得到了我所期望的结果:

代码语言:javascript
复制
15
38

但是,当我用Xquery 3.0 (也是1.0)计算这个表达式时,我得到消息:“您的查询返回了一个空序列。

有没有人能解释为什么会这样,以及我如何编写等价的Xquery语句来获得上面的Xpath语句的作用?

EN

回答 1

Stack Overflow用户

发布于 2015-06-06 04:50:05

其他XQuery实现也支持此查询

如果您想验证您的查询(根据注释中的讨论更正),当输入与问题中给出的完全相同时,确实可以与其他XQuery实现一起工作,您可以按如下方式运行它(在BaseX中测试):

代码语言:javascript
复制
declare context item := document { <actors>
    <actor filmcount="4" sex="m" id="15">Anderson, Jeff</actor>
    <actor filmcount="9" sex="m" id="38">Bishop, Kevin</actor>
</actors> };

//actor/@id

Oxygen XQuery需要额外的帮助

Oxygen XML不支持序列化属性,因此当结果序列本来应该提供给用户时,它会从结果序列中丢弃这些属性。

因此,您可以使用如下查询解决此问题:

  • //actor/@id/string(.)
  • data(//actor/@id)

下面适用于这个问题的历史版本。

坦率地说,对于任何有效的XPath或XQuery引擎,我都不期望//actors/@id会针对该数据返回任何内容。

原因是只有一个地方需要递归--一个// --那就是寻找actorsactors@id之间的单个/意味着它们需要通过直接连接,但这里给出的数据并非如此--它们之间有一个actor元素。

因此,您需要修复您的查询。您可以编写许多查询来查找本文档中所需的数据--知道哪一个是合适的将需要比您提供的更多的信息:

  • //actor/@id -在任何位置查找actor元素,并获取其id属性
    • //actor/@id-在任何位置查找actor元素;在其正下方查找id元素,并获取此类actors elements.
    • //@idid属性-在actor elements.
    • //@id的子树中查找所有actors属性-在文档中的任何位置查找id属性。<代码>H241<代码>F242

...etc。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30675484

复制
相关文章

相似问题

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