我有一个XML文件,其中包含具有以下结构的元素:
<listing>
<auction_info>
<num_bids>29</num_bids>
</auction_info>
<item_info>
<result>item A</result>
</item_info>
</listing>
<listing>
<auction_info>
<num_bids>12</num_bids>
</auction_info>
<item_info>
<result>item B</result>
</item_info>
</listing>
我需要一个查询来计算num_bids的最大值并返回结果。在我的例子中,num_bids 29是最大数字,所以需要返回项目A.But在我下面的代码中,它返回了所有结果。
let $x := //listing
let $max := max($x/auction_info/num_bids)
return $x[//num_bids = $max]/item_info/result
感谢您的帮助。
答案 0 :(得分:2)
你的表达要求的是“给我所有$ x,其中文件中有num_bids,任何地方,等于$ max。”这是不同于“给我所有$ x 它自己的 num_bids等于$ max。”以下应该做(未经测试):
let $in := //listing
let $max := max($in/auction_info/num_bids)
return
$in[auction_info/num_bids eq $max]/item_info/result
如果您真的想使用后代轴,可以将$x[//xxx]
更改为$x[.//xxx]
(请参阅额外的点?)第一个说“为每个$ x,任何xxx后代从它的根,“第二个说”为每个$ x,任何xxx后代自己。“但是根据您的示例输入,上面的查询很可能是您想要的。