我需要从以下示例中选择国家/地区的不同组合:
<neighbors>
<neighbor>
<country>Greece</country>
<country>Albania</country>
</neighbor>
<neighbor>
<country>Albania</country>
<country>Greece</country>
</neighbor>
</neighbors>
这个想法是,对于这个例子,希腊 - 阿尔巴尼亚的组合在最终结果中只出现一次(无论他们的顺序如何)。可以想象,这必须使用XQuery完成。
答案 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