我是XML和XQuery的新手。 我看到的XML数据如下:
我希望得到的结果是:
<country name="country-name">
<big>city-name</big>
<big>city-name</big>
</country>
我的代码是:
for $a in doc("countries.xml")/countries/country[count(city[population > 7000000])>=1]
return
<country> {$a/@name}
{let $b := $a/city[population>7000000]/name
return <big>{$b}</big>}
</country>
任何提示我如何获得如上所述格式的结果真的很感激。 感谢
答案 0 :(得分:1)
我想你的问题是你想省略城市名称周围的<name>
标签。您可以在使用其值时添加/data()
,例如
<big>{$b/data()}</big>
此外,您不需要count
谓词中的元素。谓词是存在量化的;所以,如果至少有一个,那就是真的,否则就是假的。另一个问题是你没有越过城市。稍微清理过的代码版本:
for $country in doc("countries.xml")/countries/country[city/population > 7000000]
return
<country>{
$country/@name,
for $city in $country/city[population > 7000000]
return <big>{ $city/name/data() }</big>
}</country>
通过在轴步骤中使用计算元素构造函数(由较新的XQuery 3.0实现支持,我使用BaseX进行测试),您可以将代码压缩到更少的行:
for $country in doc("countries.xml")/countries/country[city/population > 7000000]
return element country {
$country/@name,
$country/city[population > 7000000]/element big { ./name/data() }
}