gpt4 book ai didi

XPath:根路径表达式开头的 «/» 运算符与什么完全匹配?

转载 作者:行者123 更新时间:2023-12-03 15:51:02 24 4
gpt4 key购买 nike

在一个目录中,我有几个这样的 XML 文件:

文件 #1:<root myAtt="one"/>

文件#2:<root myAtt="two"/>

我想选择第一个文件。为此,我使用以下查询(假设目录名为“myDocs”):

collection('myDocs')[/root/@myAtt = 'one']

(我知道我可以使用 doc() 来选择感兴趣的文档。但这个例子只是我所面临的真实情况的简化版本,在这种情况下,我必须使用从中提取的集合一个数据库。)

如果我在 Saxon-HE 9.6 上运行这个查询,我会得到我期望的结果:<root myAtt="one"/> .但是如果我在 BaseX 8.3 上运行相同的查询,我会惊讶地得到:<root myAtt="one"/><root myAtt="two"/> .随之而来的是困惑。

显然,领先的/谓词内部的路径表达式(根据 Kay 博士在 XSLT 2.0 和 XPath 2.0 第 4 版中的说法,“有根路径表达式”)在不同实现中的处理方式不同。

在这种情况下,/应该选择包含上下文节点的树的文档节点。这就是撒克逊人所做的。

但在 BaseX 中,/似乎选择了谓词过滤的文档节点序列。考虑到通用比较运算符 = 的特殊行为,这将解释(如果我没弄错的话)谓词对所有文档的计算结果为 true (结果序列中始终至少有一项等于“一”)。

那么,/ 的行为也是如此根路径表达式中的运算符依赖于实现?

最佳答案

感谢关注。这是一个 bug in BaseX ,这将在 BaseX 8.4 中得到修复(此修复也可在 latest snapshot 中找到)。

以下查询是等价的,因为用作谓词路径输入的当前上下文项无论如何都将是当前根节点:

collection('myDocs')[root/@myAtt = 'one']

关于XPath:根路径表达式开头的 «/» 运算符与什么完全匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424079/

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