首页 > 解决方案 > 如何使用 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>

我的错误在哪里,我该如何解决?

标签: xmlxpathxquery

解决方案


因为您的循环$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

推荐阅读