其他 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(.)
data(//actor/@id)
以下适用于该问题的历史版本。
坦率地说,我永远不会期望//actors/@id
使用任何有效的 XPath 或 XQuery 引擎针对该数据返回任何内容。
原因是只有一个地方你在递归 - 一个//
- 并且正在寻找actors
. 和/
之间的单一意味着它们需要直接连接,但在您在这里提供的数据中并非如此——它们之间有一个元素。actors
@id
actor
因此,您需要修复您的查询。您可以编写许多查询来在本文档中找到您想要的数据——知道哪个是合适的需要比您提供的信息更多的信息:
//actor/@id
- 在任何地方查找actor
元素,并获取它们的id
属性值。
//actors/actor/@id
- 在任何地方查找actors
元素;查找actor
它们正下方的元素,并获取id
此类actor
元素的属性。
//actors//@id
- 查找元素id
子树中的所有属性actors
。
//@id
- 在文档中的任何位置查找id
属性。
...ETC。