<?xml version="1.0" encoding="utf-8"?>
<transaction>
<itemset id="1">
<item>pen</item>
<item>notebook</item>
<item>pencile box</item>
</itemset>
<itemset id="2">
<item>pen</item>
<item>notebook</item>
<item>pencile box</item>
<item>ink</item>
</itemset>
<itemset id="3">
<item>ink</item>
<item>milk</item>
</itemset>
<itemset id="4">
<item>pen</item>
<item>notebook</item>
<item>pencile box</item>
<item>ink</item>
<item>milk</item>
<item>paper</item>
</itemset>
<itemset id="5">
<item>pen</item>
<item>ink</item>
<item>notebook</item>
</itemset>
</transaction>
Предположим, у меня есть список отдельных элементов. Я хочу искать каждый элемент из набора элементов. Если в наборе есть этот элемент, я верну этот набор со всеми элементами. Например, у меня есть отдельный список предметов (молоко, бумага (это не фиксированный --- динамический список)). Молоко находится в наборе элементов-3 и наборе элементов-4, поэтому я добавлю набор элементов-3 и набор элементов-4 в новый список XML, тогда бумага будет только в наборе элементов 4. Но набор элементов-4 уже есть в списке, поэтому нет необходимости снова добавлять набор элементов 4. Мой вопрос заключается в том, как получить набор элементов с помощью XQuery на основе каждого элемента, и набор элементов добавляется только один раз в мой новый список. Я использую BaseX для запуска команды XQuery.
Ожидаемый результат выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<transaction>
<itemset id="3">
<item>ink</item>
<item>milk</item>
</itemset>
<itemset id="4">
<item>pen</item>
<item>notebook</item>
<item>pencile box</item>
<item>ink</item>
<item>milk</item>
<item>paper</item>
</itemset>
</transaction>
Код, который я пробовал:
let $src:= doc('XML/test_my.xml')/transaction
let $allitems := $src/itemset/item
let $C:=distinct-values($allitems)
for $value in $C
let $def:=$src/itemset[item=$value]
return $def
Но он повторно возвращает набор элементов для двух или более различных элементов. Как остановить печать существующего набора элементов? Помогите пожалуйста мне...