2015-11-12 17 views
0

我想所有山區的不同國家,但有時山將在一個以上的國家通過在這樣的字符串有多個國家代碼所示:XQuery在標記化後獲得不同的值?

<mountain id="mount-Kangchendzonga" country="NEP IND"></mountain> 

我可以得到所有的不同使用

let $mts := doc("mondial.xml")/mondial//mountain 
let $countries := distinct-values(data($mts/@country)) 

國家相關的字符串,但是這是不太正確的,因爲如果我有一個山與國家=「NEP IND」,另一個國家=「NEP」這會被認爲是不同的。

let $countries := distinct-values(concat(' ', data($mts/@country))) 
let $countries := distinct-values(tokenize(data($mts/@country), "\s+")) 

有沒有辦法,我可以先用空格分割一個國家的字符串,然後得到這些不同的值?我已經嘗試在連接和標記化數據上使用不同值,就像我上面顯示的那樣,但都會導致編譯器出錯。

回答

1

這是tokenize()distinct-values(),以獲得不同的國家名稱相結合的一種可能的方式:

let $all-countries := 
    for $c in $mts/@country 
    return tokenize($c, "\s+") 

let $distinct-countries := distinct-values($all-countries) 

xpathtester.com demo

或者用XQuery 3.1,如下評論所說:

($mts/@country ! tokenize(., '\s+')) => distinct-values() 
+3

或者在XQuery 3.1中: '($ mts/@ country! tokenize(。,'\ s +'))=> distinct-values()' – joewiz