【发布时间】:2018-11-15 16:30:59
【问题描述】:
我正在尝试在 mondial 数据库中递归地生成一个国家/地区的 XML 文档。该文件应说明您必须跨越多少个边界才能到达该国以及跨越的国家总数。
XML 应该如下所示:
<from_swe_cross>
<cross num="1" sum="2">
<country>Finland</country>
<country>Norway</country>
</cross>
<cross num="2" sum="3">
<country>Russia</country>
</cross>
我知道如何生成您可以前往的国家/地区列表,但不知道如何正确格式化,也知道已经过境的次数或过境的国家总数。
我现在的代码是:
declare function local:crossing($stack, $seen, $level, $sum) {
if(empty($stack)) then $seen
else (
let $country := $stack[1]
let $neighbors :=
for $code in $country/border/@country[not(. = $seen/@car_code)]
return $country/../country[@car_code = $code]
return local:crossing(($neighbors, $stack[position() > 1]), ($seen, $neighbors), $level + 1, $sum + count($neighbors))
)
};
<from_swe_cross>{
local:crossing(db:open('mondial')//country[@car_code = 'S'], db:open('mondial')//country[@car_code = 'S'], 1, 0)/name
}
</from_swe_cross>
但这仅列出了您可以穿越的所有国家/地区,如下所示:
<from_swe_cross>
<name>Albania</name>
<name>Greece</name>
<name>Macedonia</name>
<name>Serbia</name>
<name>Montenegro</name>
...
</from_swe_cross>
如何生成正确的 XML?
【问题讨论】: