我有如下代码,我想知道无需使用 FOR 循环-
就可以得到相同的结果let $doc := cts:search(fn:doc(),
cts:element-value-query(......))
let $column-values := ("one,two,three....") (: Can be n number of values :)
let $tokenized-values := fn:tokenize($column-values, ",")
let $result := for $i in $doc
let $temp := for $j in $tokenized-values
return fn:concat("$i//*:",$j)
return <root>{xdmp:value($temp)}</root>
return <result>{$result}</result>
预期结果如下-
<result>
<root>
<one>abc</one>
<two>456</two>
<three>675</three>
</root>
<root>
<one>dfd</one>
<two>235</two>
<three>765</three>
</root>
</result>
我正在获取结果,但是如果我想最大程度地减少使用 FOR 循环,该如何获得相同的结果。
有什么建议吗?
答案 0 :(得分:2)
要提高性能,您可以在要提取的所有列上放置范围索引,并使用cts:element-value-tuples代替cts:search。这样只会拉出您想要的元素,而不是整个文档。
对于第二个for循环的备用语法,您可以使用以下语法:
for $j in $tokenized-values
return fn:concat("$i//*:",$j)
收件人
$tokenized-values ! fn:concat("$i//*:", .)
尽管在性能方面大致相同。