xml - 为什么 XML 文件的值在 XQuery 中显示为属性?
问题描述
我对我为 uni proyect 编写的 XQuery 代码有疑问。代码如下:
<results>
{
for $item in doc("data.xml")//item
return
<country alpha-2="{$item/city/country}">
<name> {doc("countries.xml")//country[@alpha-2=$item/city/country]/@name} </name>
<cities>
<city>
<name> {$item/city/@name} </name>
<temp unit="{$item/temperature/@unit}"> {$item/temperature/@value} </temp>
<feels_like unit="{$item/feels_like/@unit}"> {$item/feels_like/@value} </feels_like>
<humidity unit="{$item/humidity/@unit}"> {$item/humidity/@value} </humidity>
<pressure unit="{$item/pressure/@unit}"> {$item/pressure/@value} </pressure>
<clouds> {$item/clouds/@name} </clouds>
</city>
</cities>
</country>
}
</results>
这看起来很简单,但是当我编译它时,新节点的值显示为属性,如下面的代码所示:
<?xml version="1.0" encoding="UTF-8"?>
<results>
<country alpha-2="LV">
<name name="Latvia"/>
<cities>
<city>
<name name="Zilupe"/>
<temp unit="kelvin" value="281.15"/>
<feels_like unit="kelvin" value="277.59"/>
<humidity unit="%" value="86"/>
<pressure unit="hPa" value="1023"/>
<clouds name="overcast clouds"/>
</city>
</cities>
</country>
<country alpha-2="RU">
<name name="Russian Federation"/>
<cities>
<city>
<name name="Sebezh"/>
<temp unit="kelvin" value="280.82"/>
<feels_like unit="kelvin" value="277.37"/>
<humidity unit="%" value="90"/>
<pressure unit="hPa" value="1023"/>
<clouds name="overcast clouds"/>
</city>
</cities>
</country>
</results>
有谁知道为什么会这样?我可能错过了一些明显的东西,但我看不到它。
解决方案
由于您在 xpath 中提取了一个属性,所以这就是您在元素中放置的内容。您需要用 xs:string() 包围 xpath
<name> {doc("countries.xml")//country[@alpha-2=$item/city/country]/@name} </name>
应该
<name> {xs:string(doc("countries.xml")//country[@alpha-2=$item/city/country]/@name)} </name>
推荐阅读
- css - 为 svg 背景图标添加颜色
- antlr - ANTLR 语法中解析器和词法分析器规则的调用顺序是什么?
- javascript - 用户更改值时如何重置此条件下拉表单的状态
- css - 如何在 React Native 中使用三元运算符
- azure - 在没有 Azure Front Door 的情况下使用 Azure AD B2C 自定义域
- windows - 'ffmpeg' 不是内部或外部命令、可运行程序或批处理文件
- android - 任务':runtime:buildCMakeDebug'的C / C ++配置问题和执行失败
- c - printf 编译时文件(文档)的内容
- reactjs - 如何使用功能组件在 useState 中设置 currentPage 值?
- python - 如何制作身份证的边界框?