gpt4 book ai didi

xml - 如何解决 XQUERY 1.0 FLOWR 中的自动增量 var 情况?

转载 作者:行者123 更新时间:2023-12-03 02:48:47 25 4
gpt4 key购买 nike

伪代码类似于:

 let $myNode as node() := $node 
for $subpath in tokenize($path,'/')
$myNode := $myNode/*[name()=$subpath] (: Here is the invalid line :)

我知道 xQuery 3.0 中有一个用于此目的的运算符,我要求使用 xQuery 1.0。

最佳答案

没有XQuery 2.0,但是无论版本如何,仅使用FLWOR表达式都无法实现您想要的操作。当前节点集必须在迭代之间更新,这不是 FLWOR 表达式的工作方式。

也就是说,您想要做的事情可以通过 XQuery 1.0 中的递归函数轻松实现:

declare function local:path(
$context as node()*,
$steps as xs:string*
) as node()* {
if(empty($steps)) then $context
else local:path(
$context/*[name() = $steps[1]],
$steps[position() gt 1]
)
};

您可以使用 local:path(document{ <x><y>foo</y><z/></x> }, tokenize("x/y", '/')) 来调用它.

XQuery 3.0中,这甚至更容易做到,无需新的顶级函数:

fn:fold-left(
function($context, $step) {
$context/*[name() eq $step]
},
document{ <x><y>foo</y><z/></x> },
tokenize('x/y', '/')
)

函数fn:fold-left(..)在内部处理递归,您只需指定如何修改每个步骤中的上下文集。

关于xml - 如何解决 XQUERY 1.0 FLOWR 中的自动增量 var 情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11816437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com