获取具有min属性的元素

时间:2014-09-03 10:14:45

标签: xml xquery

使用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>

有人有提示吗?

2 个答案:

答案 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 :-)