xquery选择不同的元组组合

时间:2016-02-10 22:47:07

标签: xml xquery

我需要从以下示例中选择国家/地区的不同组合:

<neighbors>
    <neighbor>
        <country>Greece</country>
        <country>Albania</country>
    </neighbor>

    <neighbor>
        <country>Albania</country>
        <country>Greece</country>
    </neighbor>
</neighbors>

这个想法是,对于这个例子,希腊 - 阿尔巴尼亚的组合在最终结果中只出现一次(无论他们的顺序如何)。可以想象,这必须使用XQuery完成。

2 个答案:

答案 0 :(得分:3)

  

&#34;这个想法是,对于这个例子,希腊 - 阿尔巴尼亚的组合在最终结果中只出现一次(无论他们是什么)&#34;

让我猜猜......不管他们的顺序如何?如果我猜对了,那么这是一种可能的方式:

distinct-values(
    for $n in neighbors/neighbor
    let $countries := 
        for $c in $n/country
        order by $c
        return $c
    return string-join($countries, '-')
)

基本上,$countries变量按顺序存储个别neighbor中所有国家/地区的序列,以便稍后,string-join()会产生相同的字符串,以防所有country元素无论顺序如何,当前neighbor都是相同的。

从这一点开始,您只需在distinct-values()结果上调用string-join()即可消除重复的字符串。

请在此处查看快速演示:http://www.xpathtester.com/xquery/8a12250b915301a880dc743750de4492

答案 1 :(得分:0)

使用saxon-lint

命令行:

saxon-lint --no-pi --xquery '
  for $x in /neighbors/neighbor
  return string-join($x/country, "-")
' file.xml

输出:

Greece-Albania
Albania-Greece