XQuery Update - добавление нового узла в группу узлов
У меня есть файл XML со следующей структурой -
<Root>
<Doc>
<Ref>
<A></A>
<B></B>
<A></A>
<B></B>
<B></B>
<B></B>
</Ref>
</Doc>
<Doc>
<Ref>
<A></A>
<B></B>
<B></B>
<B></B>
</Ref>
</Doc>
<Doc>
<Ref>
<A></A>
<B></B>
<B></B>
<A></A>
<B></B>
<B></B>
</Ref>
</Doc>
</Root>
Узел A
и все одновременные узлыB
нужно сгруппировать как
<Root>
<Doc>
<Ref>
<data>
<A></A>
<B></B>
</data>
<data>
<A></A>
<B></B>
<B></B>
<B></B>
</data>
</Ref>
</Doc>
<Doc>
<Ref>
<data>
<A></A>
<B></B>
<B></B>
<B></B>
</data>
</Ref>
</Doc>
<Doc>
<Ref>
<data>
<A></A>
<B></B>
<B></B>
</data>
<data>
<A></A>
<B></B>
<B></B>
</data>
</Ref>
</Doc>
</Root>
Количество узлов B
после узла A
может быть что угодно, как 2, 3 ... или 10..
1 ответ
Решение
Лучший способ обработать такие структуры - использовать "падающее окно". Это позволит аккуратно организовать данные в группы, которые вы хотите. Я оставлю это на ваше усмотрение, чтобы выяснить точный синтаксис обновления xquery.
for $ref in //Ref
return <Ref>{
for tumbling window $w in $ref/element()
start $s when $s/self::A
return <data>{$w}</data>
}</Ref>