xquery-如何从通过从列表中减去连续成员获得的一组值中获取最小/最大值

时间:2012-10-17 17:05:19

标签: xpath xquery flwor xpath-3.0 xquery-3.0

在xquery表达式中,我在for-expression中获得了一组值,并且一个值在一个单独的变量中。

现在,我想从列表的第一个值中减去单个值,然后相互减去列表的连续成员 - 并且在得到的差值集合中,我想获得最小值/最大值...

现在的查询看起来像这样 -

let $value1:= 1998
let $rows_citations:= 
         $doc//div[@id="patent_citations"]
                     /div[@id="patent_citations_v"]
                          /table[@class="rel_patent"]
                             /tbody/tr[1]
                                      /following-sibling::tr
for $pos in $rows_citations/position()
let $date2_c := customfn:dateconverter1($rows_citations[$pos]/td[3])

现在我想要的减法介于date2_c的第一个值和值1之间,之后是date2_c的连续成员之间......并且从结果列表中我想要最小值/最大值。 ..我该怎么做呢?

我是特别的。困惑于创建一个存储所有差异的新列表变量,尤其是当我们已经在for循环中,并迭代列表的每个值(通过变量date2_c)

1 个答案:

答案 0 :(得分:2)

<强>予。这个XQuery 3.0查询(也是纯XPath 3.0表达式):

let $pVal := 1,
    $vList := (2,4,7,11,16),
    $vList2 := ($pVal, subsequence($vList, 1, count($vList)-1)),
    $vSubtactedList :=
            map-pairs(function($m as xs:integer, $n as xs:integer) as xs:integer
                        {
                         $m - $n
                        },
                        $vList,
                        $vList2
                      )
    return
      (min($vSubtactedList), max($vSubtactedList))

从减法列表中生成所需结果的最小值和最大值:

1 5

<强> II。 XQuery 1.0解决方案:

let $pVal := 1,
    $vList := (2,4,7,11,16),
    $vList2 := ($pVal, subsequence($vList, 1, count($vList)-1)),
    $vSubtactedList :=
                for $i in 1 to count($vList)
                 return
                    $vList[$i] - $vList2[$i]

 return
    (min($vSubtactedList), max($vSubtactedList))

这会再次产生相同的正确结果

1 5