【问题标题】:XQuery get distinct values after tokenize?XQuery 在标记化后获得不同的值?
【发布时间】:2015-11-15 06:29:34
【问题描述】:

我想获得所有山脉的不同国家,但有时一座山会在多个国家/地区,如在这样的字符串中有多个国家代码所示:

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

我可以使用

获取与一个国家/地区关联的所有不同字符串
let $mts := doc("mondial.xml")/mondial//mountain 
let $countries := distinct-values(data($mts/@country))

但这并不完全正确,因为如果我有一个带有 country="NEP IND" 的山和另一个带有 country="NEP" 的山,这些将被识别为不同的。

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

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

【问题讨论】:

    标签: xquery tokenize concat distinct-values


    【解决方案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()
    

    【讨论】:

    • 或者在 XQuery 3.1 中:($mts/@country ! tokenize(., '\s+')) =&gt; distinct-values()
    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多