我需要xquery结构,它与java代码相同
string temp
for(int i=0,i<string[].length,i++)
temp=temp+string[i]
例如,在xquery中,我有字符串/ a / b / c我需要像
这样的东西 let $temp:=""
for $x in tokenize(string,'/')
$temp=concat($temp,$x)
return $temp
并且它应该在每次迭代时返回以下内容
a
ab
abc
但不知何故它接缝这句话$ temp = concat($ temp,$ x)无效。那么这样做的正确语法是什么?提前致谢
答案 0 :(得分:2)
我认为,你需要获得声明性编程的概念。您试图告诉处理器该做什么(就像您在java中所做的那样)而不是描述整体结果。例如,如果您不使用scripting extension(仅某些处理器支持,例如zorba),则不能像在java中使用它们那样使用赋值。将其视为描述一个结果文档的完整查询。
这个东西在开始时很难获得,但它最终带来了巨大的好处(生产力,稳健性,性能)。
我会将你的命令式伪代码翻译成这个单行代码:
string-join(tokenize("/a/b/c",'/'))
您可以在try.zorba-xquery.com上进行测试。我真的希望这会有所帮助。对不起,如果这不是您要找的答案......
答案 1 :(得分:0)
$ temp = conct($ temp,$ x)不会累积,因为在XQuery中,每次循环都是一个新变量。请尝试以下操作(在MarkLogic中测试但使用所有标准语法):
declare function local:build($prefix, $tokens)
{
if (fn:exists($tokens)) then
let $str := fn:concat($prefix, $tokens[1])
return (
$str,
local:build($str, fn:subsequence($tokens, 2))
)
else ()
};
let $string := "/a/b/c"
return local:build("", fn:tokenize($string, "/"))