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"]

1 ответ

Решение

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

Следующий код должен сделать трюк:

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

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

Другие вопросы по тегам