Как передать один FLWOR в другой? - PullRequest
1 голос
/ 14 февраля 2020

Простой FLWOR для получения всех данных (из того, что было электронной таблицей):

for $foo  in db:open("foo")
return $foo//text()

дает такой тип вывода:

...    
Smallville, XX 12345-1234
Bob 
(123) 456-7809
(123) 876-3468
Smallville, XX 12345-1234
Alice
Smallville, XX 12345-1234
Fred
(123) 654-5432
Smallville, XX 12345-1234
...

и другой, который возвращает non-numberri c data:

for $foo  in db:open("foo")
return $foo//text()[not(matches(., '[0-9]'))]

Который кажется , чтобы возвращать только имена. Исходя из этого предположения, ищем закрывающие теги на <person> и открываем новый <person>, например:

<person>
<name>a</name>
<data>123</data>
<data>345</data>
<data>123 main st</data>
</person>

<person>
...
</person>

или что-то в этом роде. Только на самом деле надеемся отделить людей от предположения , что в их имени нет цифр, а затем создать какую-то сущность в XML.

Так долго, как каждый раз "имя" найдено, что вызывает закрытие тегов и затем "запуск" нового человека Совсем не уверен в стандартном lin go здесь.

1 Ответ

2 голосов
/ 14 февраля 2020

Следующее создает временную структуру XML, затем перебирает каждый из элементов name, создавая person с name и его элементами following-sibling::data.

let $temp := 
  <doc>{
    for $foo in db:open("foo")
    return
      if (matches($foo, "[0-9]")) 
      then <data>{$foo}</data>
      else <name>{$foo}</name>
  }</doc>

for $name in $temp/name
return
  <person>{
    $name,
    $name/following-sibling::data[preceding-sibling::name[1]= $name]
  }</person>
...