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