首页 > 解决方案 > 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

解决方案


在您的 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))]

两种情况下的结果都是相同的(对于您的示例)。


推荐阅读