为什么使用WHERE的查询不起作用,但是我的XPath查询却起作用?

时间:2019-04-25 20:25:24

标签: xml xpath xquery

我有一个包含以下元素的示例xml

<tienda>
  <empleados>
    <empleado cod="B">
      <nombre>Juan</nombre>
      <localidad>Linares</localidad>
      <provincia>Jaén</provincia>
    </empleado>
    <empleado cod="B">
      <nombre>Pepe</nombre>
      <localidad>Algeciras</localidad>
      <provincia>Cádiz</provincia>
    </empleado>
    <empleado cod="A">
      <nombre>Víctor</nombre>
      <localidad>Jaén</localidad>
      <provincia>Jaén</provincia>
    </empleado>
    <empleado cod="A">
      <nombre>Luisa</nombre>
      <localidad>Granada</localidad>
      <provincia>Granada</provincia>
    </empleado>
    <empleado cod="A">
      <nombre>Pedro</nombre>
      <localidad>El Viso del Alcor</localidad>
      <provincia>Sevilla</provincia>
    </empleado>
    <empleado cod="A">
      <nombre>Andrés</nombre>
      <localidad>Sevilla</localidad>
      <provincia>Sevilla</provincia>
    </empleado>
    <empleado cod="C">
      <nombre>María</nombre>
      <localidad>Guadix</localidad>
      <provincia>Granada</provincia>
    </empleado>
  </empleados>
</tienda>

有一些省(省),例如,我只想检索格拉纳达和塞维利亚。

如果我使用XPath中的位置运行此查询,则运行OK:

for $e in doc("LMSGI06.1.xml")/tienda/empleados/empleado[provincia = "Granada" or provincia="Sevilla"]
return $e

结果:

<provincia>Granada</provincia>
<provincia>Sevilla</provincia>
<provincia>Sevilla</provincia>
<provincia>Granada</provincia>

但是实际上我想使用子句Where,我尝试了这个,但是查询检索了所有省份。

for $e in doc("LMSGI06.1.xml")/tienda/empleados
where $e/empleado/provincia = "Granada"
  or $e/empleado/provincia = "Sevilla"
return $e/empleado/provincia

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

更改您的XQuery,以迭代empleado元素,如下所示:

for $e in doc("LMSGI06.1.xml")/tienda/empleados/empleado
where $e/provincia = "Granada" or $e/provincia = "Sevilla"
return $e/provincia

输出为:

<provincia>Granada</provincia>
<provincia>Sevilla</provincia>
<provincia>Sevilla</provincia>
<provincia>Granada</provincia>

您的错误是要遍历错误的元素。就是这样。