Я хочу объединить несколько line_comments в один комментарий с помощью xquery - PullRequest
1 голос
/ 09 июля 2020

Я новичок в xml и xquery. У меня есть документ xml, в котором есть несколько TEXT_LINE для одной и той же позиции. Я хочу объединить эти несколько данных TEXT_LINE в один комментарий на основе PO_ITEM. Здесь PO_ITEM 00020 имеет два тега TEXT_LINE, которые мне нужно объединить в один. То же самое для PO_ITEM 00030.

<XI_PO_TEXTS>
 <PO_ITEM>00020</PO_ITEM>
 <TEXT_LINE>this is comment one</TEXT_LINE>
</XI_PO_TEXTS>
<XI_PO_TEXTS>
 <PO_ITEM>00020</PO_ITEM>
<TEXT_LINE>tis is comment two</TEXT_LINE>
</XI_PO_TEXTS>
<XI_PO_TEXTS>
 <PO_ITEM>00030</PO_ITEM>
 <TEXT_LINE>this is comment three </TEXT_LINE>
</XI_PO_TEXTS>
<XI_PO_TEXTS>
 <PO_ITEM>00030</PO_ITEM>>
 <TEXT_LINE>this is comment four</TEXT_LINE>
</XI_PO_TEXTS>

Я пробовал использовать соединение строк, но он объединяет все 4 строки для каждого PO_ITEM.

`string-join($Source/XI_PO_TEXTS[fn:data($Source/XI_PO_TEXTS/PO_ITEM)=fn:data($comment/PO_ITEM)]/TEXT_LINE,'')`

Пожалуйста, предложите, как запрос должен быть объединен комментарий строки принадлежит указанному c PO_ITEM?

1 Ответ

1 голос
/ 09 июля 2020

В XQuery 3.0 или 3.1 это стандартный пример группировки учебников с использованием group by:

for $text in //XI_PO_TEXTS 
group by $item := $text/PO_ITEM 
return 
    <XI_PO_TEXTS>
    {
        head($text)/PO_ITEM, 
        <TEXT_LINE>
        {
            data($text/TEXT_LINE)
        }
        </TEXT_LINE>
    }
    </XI_PO_TEXTS>

https://xqueryfiddle.liberty-development.net/gWmuPs5/1

...