XQuery, değişkenlerin değişmez olduğunu ima eden işlevsel bir programlama dilidir. Tanımlanmış bir değişkeni basitçe artıramaz veya ekleyemezsiniz. Genellikle, sonucu oluşturmak için bir özyinelemeli işlev kullanılır.
Bu örnekler (daha özlü olanlar var, her bir parçayı parçalara ayırarak ayırmak istedim ve anlaması basit), her seferinde her seferinde başka bir seviyeye ekleyerek yolu yinelemeli olarak oluşturur. Farklı görevleri karıştırmamak için $path
öneki ayrı olarak eklenir. Bu özel durumda
declare variable $path as xs:string :="D:\Mongo\";
declare variable $uri as xs:string := "/MJ/1932/Vol1/Part1/387.xml";
declare function local:add-path($parts as xs:string*) as xs:string* {
let $head := $parts[1]
let $tail := $parts[position() > 1]
return
if ($head)
then (
$head,
for $path in local:add-path($tail)
return string-join(($head, $path), "\")
)
else()
};
for $uri in local:add-path(fn:tokenize(fn:normalize-space(fn:replace($uri,"/"," ")), " "))
return concat($path, $uri)
, alternatif bir pozisyon reçetesiz döngü olacaktır ve bu pozisyona parçaları katılmak:
declare variable $path as xs:string :="D:\Mongo\";
declare variable $uri as xs:string := "/MJ/1932/Vol1/Part1/387.xml";
let $parts := fn:tokenize(fn:normalize-space(fn:replace($uri,"/"," ")), " ")
for $i in (1 to count($parts))
return concat($path, string-join($parts[position() <= $i], '\'))
Teşekkür Jens Erat, Onun iyi çalışıyor. – Antony