在 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)
I.此 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
二、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