XQuery:查找最大值并返回相关信息

时间:2015-05-13 05:02:53

标签: max xquery

我有一个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

感谢您的帮助。

1 个答案:

答案 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后代自己。“但是根据您的示例输入,上面的查询很可能是您想要的。