2011-12-01 54 views

回答

4

不確定;這裏是一個辦法:

let $width := 10 
let $string := '...' 
for $i in 0 to string-length($string) idiv $width 
let $pos := $i * $width + 1 
return substring($string, $pos, $width) 

希望這有助於 基督教

1

最明顯的方式,想到的是

for $i in 0 to string-length($input)+9 idiv 10 
return substring($input, $i*10+1, 10) 

讓你理清不可避免的off-by-一個錯誤...

2

以下是使用遞歸函數的可能解決方案:

declare function local:split($str,$start,$len){ 
    let $res := substring($str,$start,$len) 
    return if ($res) then ($res,local:split($str,$start + $len, $len)) else $res 
}; 

let $x := "sdlfksldfkjsldfkfjsldkjflskfd" 
return local:split($x,1,10) 
1

有了一個遞歸函數,你可以這樣做:

declare function local:splitString($String as xs:string?, $length as xs:integer) as xs:string* { 
    if (exists($String) and string-length($String) > $length) then 
    (substring($String,1,$length), local:splitString(substring($String,$length),$length)) 
    else $String 
};