Почему мой запрос с использованием WHERE не работает, а мой запрос XPath работает? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть пример 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, он выполняется нормально:

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 Ответ

1 голос
/ 25 апреля 2019

Измените свой 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>

Ваша ошибка заключалась в итерациинад неправильными элементами.Вот и все.

...