xml - 如何使用 LET 和 WHERE 获取元素的名称?
问题描述
我有xml
一些元素:
<tienda>
<formacion>
<curso id="1">
<nombre>Android</nombre>
<plazas>20</plazas>
</curso>
<curso id="2">
<nombre>iOS</nombre>
<plazas>15</plazas>
</curso>
<curso id="3">
<nombre>SEM / SEO</nombre>
<plazas>55</plazas>
</curso>
<curso id="4">
<nombre>Photoshop</nombre>
<plazas>10</plazas>
</curso>
<curso id="5">
<nombre>RPAS</nombre>
<plazas>5</plazas>
</curso>
</formacion>
</tienda>
我需要返回具有最少名额(广场)的课程(光标),在此示例中,名额较少的课程是RPAS,因为它有 5 个<plazas>5</plazas>
。
我已经开发了这个 xquery 句子:
for $f in doc("LMSGI06.1.xml")//formacion
let $minplazas := min($f/curso/plazas)
where $f/curso/plazas = $minplazas
return $f/curso/nombre
但是这段代码不会检索我<plazas>5</plazas>
,它会返回我:
<nombre>Android</nombre>
<nombre>iOS</nombre>
<nombre>SEM / SEO</nombre>
<nombre>Photoshop</nombre>
<nombre>RPAS</nombre>
我的错误在哪里,我该如何解决?
解决方案
因为您的循环$f
绑定到<formacion>
元素,所以该where
子句适用。然后,当您返回时$f/curso/nombre
,它会返回所有<nombre>
元素。您需要将约束应用于<curso>
元素。
有很多方法可以做到这一点,但在不干扰外部循环的情况下,您可以where
通过在语句中向 XPath 添加谓词来消除子句并应用约束return
:
for $f in doc("LMSGI06.1.xml")//formacion
let $minplazas := min($f/curso/plazas)
return $f/curso[plazas = $minplazas]/nombre
推荐阅读
- python - 合并文件夹中每两个连续的txt文件 - Python
- python - Python - 循环遍历表中的行并传递 SQL 参数
- django - 令牌键名 django-rest-auth
- php - 如何将 curl 转换为 fopen 流
- python - Pandas DataFrame 按数组乘法
- android-studio - 在 Android 模拟器上连接到 localhost
- reactjs - 样式组件中的嵌套函数
- git - 为什么即使成功推送,我也会收到“致命:遇到 Http 请求异常”?
- pagination - Acumatica OData 分页
- nlp - 了解 RASA 对话流 REST API