标记化后,XQuery获得不同的值?

时间:2015-11-12 01:39:59

标签: xquery tokenize concat distinct-values

我希望得到所有山脉的不同国家,但有时候山峰会出现在多个国家/地区,如下所示:在这样的字符串中包含多个国家/地区代码:

<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+"))

有没有办法我可以先用空格分割一个国家的字符串,然后得到这些的不同值?我已尝试在连接和标记化数据上使用distinct-values,如上所示,但两者都会导致编译器出错。

1 个答案:

答案 0 :(得分:1)

这是合并make buildtokenize()以获取不同国家/地区名称的一种可能方式:

distinct-values()

<强> xpathtester.com demo

或者在XQuery 3.1中,如下面的评论所示:

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

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