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

标签 xpath xquery oxygenxml

我了解到每个 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/

相关文章:

html - (HTML) 通过 CSS 选择器选择下一个匹配元素?

c# - slowcheetah 转换配置文件中元素的值

emacs - 如何调用编辑器到特定的行和相对于该行的字符位置?

CSS/XHTML : Show div after a specific count of table rows

用于选择元素内部文本的 Xpath

python - 如何使用 lxml 选择和更新混合内容中的文本节点?

java - 大型 XML 文件的 XQuery Java 性能

xquery - XQueryX 的任何实现?

java - Saxon XQuery 内存管理

html - 为什么在从 Docbook/Oxygen 生成的 html 文件中不显示斜体文本