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>
Другие вопросы по тегам