使用Xquery我想获得具有min sortOrder的行。在下面的示例中,id = 3的行。
<table>
<row id="1"><attribute identifier="sortOrder">120</attribute><attribute identifier="mainContent">Test 3</attribute></row>
<row id="2"><attribute identifier="sortOrder">130</attribute><attribute identifier="mainContent">Test 1</attribute></row>
<row id="3"><attribute identifier="sortOrder">10</attribute><attribute identifier="mainContent">Test 2</attribute></row>
</table>
有人有提示吗?
答案 0 :(得分:2)
使用min()函数查找min值,然后在行中查找:
let $min := min(//row/attribute[@identifier='sortOrder'])
return //row[attribute[@identifier='sortOrder'] = $min]
答案 1 :(得分:2)
如果您可以访问XQuery 3.0实现,那么我很熟悉这种功能方法:
xquery version "3.0";
let $apply := function($xs, $f, $xpath) {
$xpath($xs[. = $f($xs)])
} return
$apply(
//row/attribute[@identifier eq 'sortOrder'],
fn:min#1,
function($x) {
$x/parent::node()
}
)
这种方法的一个不错的属性是你只需要对初始数据进行一次搜索,即//row/attribute[@identifier eq 'sortOrder']
只需要评估一次,这可能更有效。
另一个不错的属性是lambda $apply
是一个泛型函数,所以你可以将它重用于$xs
上运行的任何函数,例如fn:max#1
:-)