gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:02:21 26 4
gpt4 key购买 nike

我了解到每个 Xpath 表达式也是一个有效的 Xquery 表达式。我将 Oxygen 16.1 与此示例 XML 结合使用:

<actors>
<actor filmcount="4" sex="m" id="15">Anderson, Jeff</actor>
<actor filmcount="9" sex="m" id="38">Bishop, Kevin</actor>
</actors>

我的表情是:

//actor/@id

当我使用 Xpath 3.0 在 Oxygen 中计算此表达式时,我得到了我所期望的结果:

15
38

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

任何人都可以提供任何关于为什么会这样的见解,以及我如何编写等效的 Xquery 语句来获取上面 Xpath 语句的作用?

最佳答案

其他 XQuery 实现确实支持此查询

如果您想验证您的查询(根据评论中的讨论进行更正)确实在完全按照问题中的输入输入时可以与其他 XQuery 实现一起使用,您可以按如下方式运行它(在 BaseX 中测试):

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(.)
  • 数据(// Actor /@id)

以下内容适用于该问题的历史版本。

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

原因是您只能递归一个地方 - 一个 // - 也就是寻找 actoractors@id 之间的单个 / 意味着它们需要直接连接,但这不是您在此处提供的数据中的情况 - 它们之间有一个 actor 元素。

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

  • //actor/@id - 在任意位置查找 actor 元素,并获取其 id 属性值。
  • //actors/actor/@id - 在任何地方查找 actors 元素;查找直接位于其下的 actor 元素,并获取此类 actor 元素的 id 属性。
  • //actors//@id - 查找 actors 元素子树中的所有 id 属性。
  • //@id - 在文档中的任意位置查找 id 属性。

...等等

关于xpath - 无法使用 Oxygen XQuery 实现选择 XML 属性; Oxygen XPath 发出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30675484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com