xpath - max() 输出正确的数字,count()="right number" 选择正确的节点,但是 count()=max() 失败
问题描述
这是这个问题的一个分支,并试图使用这个答案- 但出了点问题......
这是代码:
<table>
<row>
<column/>
</row>
<row>
<column/>
<column/>
<column/>
</row>
<row>
<column/>
<column/>
</row>
</table>
目标是<row>
具有最大<column>
孩子数的。
表达方式
./table/row/count(column)
正确输出
1,3,2
表达方式
max(./table/row/count(column))
正确输出
3
表达方式
./table/row[count(column) = 3]
正确选择目标行。但是 - 表达式
./table/row[count(column) = max(./table/row/count(column))]
结果没有匹配。
我是在错误地使用它还是事情就是这样?
解决方案
在您的 XPath 表达式中,您context item
的谓词是./table/row
. 所以count(column)
与当前节点相关并成功,因为column
是 的子节点row
。您的max(...)
表达式也与 this 相关context item
row
,但它没有./table/row/count(column)
孩子,因此它返回空。
使用这样的相对表达式返回两个级别确实解决了这个问题:
./table/row[count(column) = max(../../table/row/count(column))]
否则,如果要使用绝对路径,也可以使用
./table/row[count(column) = max(/table/row/count(column))]
两种情况下的结果都是相同的(对于您的示例)。
推荐阅读
- c# - 如何在 selenium c# 中滚动放大的图像
- python - 尝试通过运行 Tkinter 的发送进程在进程之间通过管道发送任何内容时出现管道错误
- javascript - React Native 中的密码创建验证
- javascript - 当我将所有 5 个节点正确连接时,无法获得正确的连接弹出消息
- vue.js - Vue-apollo:通过计算属性更改 apollo 客户端
- excel - Sheets.Range 中的值
- android-studio - 安装模拟器时如何解决这个问题
- firebase-cloud-messaging - 将 FMC 消息逐块发送到主题
- python - 开放天气 API JSON
- r - 在 R 中的函数中使用变量作为参数