2011-08-30 34 views
1

我需要的XQuery結構,其使用Java代碼如何構建串迭代XQuery中

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 

以下但不知何故,接縫,這種說法$溫度=合作ncat($ temp,$ x)不起作用。那麼這樣做的正確語法是什麼?在此先感謝

回答

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 := "https://stackoverflow.com/a/b/c" 
return local:build("", fn:tokenize($string, "/")) 
2

我認爲,您需要獲取聲明性編程的概念。你正在試圖告訴處理器做什麼(就像你在java中所做的那樣),而不是描述整體結果。例如,如果您不使用scripting extension(僅受某些處理器支持(例如zorba)),則不能像在java中使用它們那樣使用分配。把它看作描述一個結果文檔的完整查詢。

這件事一開始就很難得到,但它最終帶來了巨大的好處(生產力,穩健性和性能)。

我會翻譯你的當務之急僞代碼到這個一行代碼:

string-join(tokenize("https://stackoverflow.com/a/b/c",'/')) 

您可以測試它try.zorba-xquery.com。我真的希望這有助於。對不起,如果這不是你正在尋找的答案...