php - 为什么 xPath 以相反的顺序返回这些元素?
问题描述
有人能告诉我为什么下面的 xPath 表达式会导致数组顺序相反吗?
/ReaderDetails/Reader[Pin = "2325" or Pin = "2421" or Pin = "2424"]
然后,当我执行 aforeach
时,返回的数组首先拉取 2424 的元素,然后是 2421,最后是 2325。
这些 PIN 以逗号分隔的列表输入,并且需要按此顺序排列。
解决方案
如果你在 XPath 1.0 中(我假设你是,因为使用更高版本的人通常会提到这个事实)然后根据 XPath 规范,结果是一个节点集,而一个节点集实际上是一组节点没有明确的顺序。但是,我所知道的所有实现都以文档顺序返回节点集的结果,因为这就是 XSLT 需要它们的方式,并且大多数 XPath 实现都是以 XSLT 作为重要用例来设计的。因此,Reader
在向前扫描文档时,元素可能会按照它们遇到的顺序返回。
在 XPath 3.1 中,您可以通过编写以选定的顺序返回一系列节点
/ReaderDetails ! (Reader[Pin = "2325"],
Reader[Pin = "2421"],
Reader[Pin = "2424"])
或者也许(如果所需的顺序总是“按密码排序”),
sort(/ReaderDetails/Reader[Pin = ('2325', '2421', '2424'), (),
function($r) {number($r!Pin})
但要做到这一点,您需要安装不同的 XPath 引擎,例如 Saxon/C。
在 XPath 1.0 中不可能以非文档顺序返回节点序列,因为没有这样的数据类型。XPath 1.0 中唯一的集合数据类型是节点集,正如我所提到的,它没有规定的顺序。因此,您使用 XPath 1.0 的唯一选择是使用单独的 XPath 表达式一次检索一个节点,或者可能在调用应用程序中对节点进行排序。
推荐阅读
- python - TfLite LSTM 模型
- javascript - Wordpress 无法上传图片
- css - 将 Pandas Styler 应用于 MultiIndex 列表
- java - 调用quickbooks api时API响应状态码400
- java - 将矩形添加到 JPanel
- r - R中的重复测量方差分析:必须使用有效的下标向量子集列
- android - 设置文本时,Android TextView 不会“wrap_content”
- arrays - C不打印二维动态数组内容
- python - 如何根据另一列中是否满足一组条件,向 Python 中的数据框添加新列?
- python - 使用 PCA 找到网格的 3d 点云的主轴