在属性中返回数据

Have data being returned in an attribute

for $Citypop in  doc("mondial.xml")//city[population > 1000000]/population[last()]
let $Cityname := doc("mondial.xml")//city[population = $Citypop]/name
let $Countryname := doc("mondial.xml")/$Cityname/../../name/../../name
let $Countrypop := doc("mondial.xml")/$Countryname/../population
let $popshare := 100*($Citypop[1] div $Countrypop[1])
return <city> {$Cityname} </city>

这将从上面的 $Cityname 变量中 return 很多不同的城市名称如下。我似乎无法做的是 return $popshare$Countryname 变量作为属性。所以我希望格式看起来像:

<city popshare="20" country="Spain">Madrid</city> 

我现在得到的是:

<city>Madrid</city>

我试过类似的方法:

<city country= $Countryname >

但是语法不允许。

您真的应该复习一下 XML 和 XQuery 基础知识。在 XML 中,所有属性都必须用引号括起来,并且要在 XQuery 中计算属性值中的表达式,您需要花括号(否则它将输出引号中的文字值)。

<city country="{ $Countryname }" />

在 XSLT 中,这称为属性值模板。我不认为 XQuery 称它为同一事物,但概念基本相同:

http://www.w3.org/TR/xquery-30/#id-attributes