Как добавить атрибут узла на основе счетчика вложенных индексов с помощью FLWOR? - PullRequest
0 голосов
/ 20 июня 2020

Следующий результат не так уж и далек, но запрос создает новый record элемент для каждой entry записи, тогда как исходные данные имеют четыре entry узла элементов в каждой записи.

Таким образом, некоторые данные стираются. Должно быть четыре узла entry, которые являются дочерними для узла record, record; элемент root - это csv.

Как я могу добавить атрибуты к каждому entry элементу , не изменяя дерево документа?

Что я ищу for выглядит как:

<record>
<entry num="1">2020-01-26</entry>
<entry num="2">Vancouver Coastal</entry>
..
<record>
<entry num="1">2020-02-02</entry>
..

, так что "счетчик" перезапускается для каждой записи.

текущий вывод:

<csv>
  <record>
    <entry num="1">2020-01-26</entry>
  </record>
  <record>
    <entry num="2">Vancouver Coastal</entry>
  </record>
  <record>
    <entry num="3">M</entry>
  </record>
  <record>
    <entry num="4">40-49</entry>
  </record>
  <record>
    <entry num="5">Lab-diagnosed</entry>
  </record>
  <record>
    <entry num="6">2020-02-02</entry>
  </record>
  <record>
    <entry num="7">Vancouver Coastal</entry>
  </record>
  <record>
    <entry num="8">baz</entry>
  </record>
  <record>
    <entry num="9">50-59</entry>
  </record>
  <record>
    <entry num="10">Lab-diagnosed</entry>
  </record>
  <record>
    <entry num="11">2020-02-05</entry>
  </record>
  <record>
    <entry num="12">Vancouver Coastal</entry>
  </record>
  <record>
    <entry num="13">F</entry>
  </record>
  <record>
    <entry num="14">20-29</entry>
  </record>
  <record>
    <entry num="15">Lab-diagnosed</entry>
  </record>
</csv>

xquery:

<csv>
{    

for $x at $i in db:open("bccdc_covid19.abbreviated")/csv/record/entry

return <record><entry num="{$i}">{$x/@*, $x/node()}</entry></record>

}


</csv>

ввод:

<csv>
  <record>
    <entry>2020-01-26</entry>
    <entry>Vancouver Coastal</entry>
    <entry>M</entry>
    <entry>40-49</entry>
    <entry>Lab-diagnosed</entry>
  </record>
  <record>
    <entry>2020-02-02</entry>
    <entry>Vancouver Coastal</entry>
    <entry>baz</entry>
    <entry>50-59</entry>
    <entry>Lab-diagnosed</entry>
  </record>
  <record>
    <entry>2020-02-05</entry>
    <entry>Vancouver Coastal</entry>
    <entry>F</entry>
    <entry>20-29</entry>
    <entry>Lab-diagnosed</entry>
  </record>
</csv>

Требуется сохранить структуру исходного документа, указанного выше.

1 Ответ

1 голос
/ 20 июня 2020

Вы можете вложить все такие структуры, например

<csv>
{
    for $record in csv/record
    return
        <record>
        {
            for $entry at $pos in $record/entry
            return
                <entry num="{$pos}">{data($entry)}</entry>
        }
        </record>
}
</csv>
...