在XQuery中更改子元素名称

时间:2014-02-07 18:41:11

标签: xml xpath xquery saxon kernow

我是XML和XQuery的新手。 我看到的XML数据如下:enter image description here

我希望得到的结果是:

 <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>

任何提示我如何获得如上所述格式的结果真的很感激。 感谢

1 个答案:

答案 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() }
  }