这是of this question的分支,并尝试使用this answer-但出了点问题...
这是代码:
<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))]
没有匹配结果。
我使用不正确吗?还是只是这样?
答案 0 :(得分:1)
在XPath表达式中,谓词中的context item
是./table/row
。由于count(column)
是column
的子代,因此row
与当前节点有关并成功。您的max(...)
表达式也与此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))]
在两种情况下(对于您的示例)结果都是相同的。
答案 1 :(得分:1)
您快到这里了...引起问题的唯一原因是范围。
这是正确的xpath。
./table/row[count(column) = max(/table/row/count(column))]
在原始xpath“ ./table/row[count(column)= max(。 / table / row / count(column))]”)中,max中的点不过是什么将范围限制为当前节点,例如./table/row
。在检查所有表行以查找最大列时,应删除max函数中的。。
答案 2 :(得分:1)
要获得更好的可读性和更快的评估速度,请使用XPath 2.0的全部功能:
for $vMax in max(/table/row/count(column))
return
/table/row[count(column) eq $vMax]