XQuery: заполнение массива способом FLWOR

У меня есть массив, и я хочу заполнить его строками, взятыми из определенных узлов XML, как в этом примере псевдокода:

let $array := array {}

for $child in $collection
where contains(data($child), "Hey")
do $array := array:append($array, data($child))

Как будет выглядеть правильный код для выполнения такой операции?

Итак, если у меня есть этот XML

<root>
    <child>Hey</child>
    <child>Ho</child>
    <child>Hey Ho</child>
</root>

Я ожидаю, что массив будет

array ["Hey", "Hey Ho"]

person Seb3736    schedule 17.01.2017    source источник


Ответы (1)


XQuery — это функциональный язык. Таким образом, переменные не могут быть переназначены после того, как они были объявлены.

Следующий код должен помочь:

array {
  for $child in $collection
  where contains(data($child/node1), "Hey")
  return $child/node2
}

Обратите внимание, что собственный тип данных XQuery для значений — это последовательность. В зависимости от вашего варианта использования, возможно, вам вообще не нужны массивы.

person Christian Grün    schedule 17.01.2017
comment
Или проще и ближе к предоставленному XML, array{ $collection[contains(.,"Hey")] } - person Michael Kay; 18.01.2017
comment
Правильно. Кажется, что исходный вопрос был отредактирован после того, как я разместил свой ответ. - person Christian Grün; 18.01.2017