xquery count для цикла внутри цикла for - PullRequest
1 голос
/ 15 октября 2019

xquery Я хотел бы посчитать данные элемента цикла. Код:

    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";

declare option output:method 'xml';
declare option output:indent 'yes';

let $act :=(
<act time="1231">
 <data>hel1lo</data>
 <data>hel1lo</data>
</act>,
<act time="51292">
 <data>world</data>
 <data>wo2rld2</data>
 <data>world2</data>
</act>
)
for $data in $act
return
<act time ="{$data/@time}">
    {
    for $count at $cnt in $data/data
    return
    <data value ="{$count}">{$cnt}</data>

    }
</act>

(:

<?xml version="1.0" encoding="UTF-8"?>
<act time="1231">
   <data value="hel1lo">1</data>
   <data value="hel1lo">2</data>
</act>
<act time="51292">
   <data value="world">1</data>
   <data value="wo2rld2">2</data>
   <data value="world2">3</data>

</act>

because i need data from act element as well


exptected:

<?xml version="1.0" encoding="UTF-8"?>
<act time="1231">
   <data value="hel1lo">1</data>
   <data value="hel1lo">2</data>
</act>
<act time="51292">
   <data value="world">3</data>
   <data value="wo2rld2">4</data>
   <data value="world2">5</data>
</act>


:)

Код ЗДЕСЬ: https://xqueryfiddle.liberty -development.net / pPgCcoE / 3

проблема в. Мне нужно, чтобы он был в цикле secoundery, но я хотел бы знать, как продолжить первый отсчет. Это должен быть цикл внутри цикла

1 Ответ

2 голосов
/ 15 октября 2019

Одним из способов будет использование всех элементов во внутреннем for .. at, чтобы переменная, связанная в предложении at, имела правильное значение относительно всей последовательности, но затем добавляла предложение where where $count/.. is $data передвозврат, гарантирующий, что мы обрабатываем только те элементы, у которых есть правильный родительский элемент, т. е. где родительский элемент является текущим $data item:

let $act :=(
<act time="1231">
 <data>hel1lo</data>
 <data>hel1lo</data>
 <data>hel231lo</data>
 <data>hel1lo</data>
 <data>hel12lo</data>
 <data>hel1lo</data>
 <data>hel123lo</data>
</act>,
<act time="51292">
 <data>world</data>
 <data>wo2rld2</data>
 <data>world2</data>
 <data>worl2d</data>
 <data>worl1d</data>
 <data>worl2d</data>
</act>
)
for $data in $act
return
<act time ="{$data/@time}">
    {
    for $count at $cnt in $act/data
    where $count/.. is $data
    return
    <data value ="{$count}">{$cnt}</data>

    }
</act>

https://xqueryfiddle.liberty -development.net / pPgCcoE /4

...