Получить XML-подмножество - PullRequest
0 голосов
/ 17 апреля 2019

Я получил два XML.XML 1 и xml 2. xml 2 - это подмножество XML 1. Мне нужно получить окончательный XML, который имеет все значения XML 1, но не XML 2.

Попытка преобразования значений XML в строки, разделенные запятымии заполнить их в массиве и сделал сравнение строк и т. д. Но это не сработало.Более того, размер XML может быть очень большим и не является решением.Мне нужно решить эту проблему только с помощью XQUERY.

xml1:

<root>
   <f>a</f>
   <f>b</f>
   <f>c</f>
</root>

xml2:

<root>
   <f>b</f>
   <f>c</f>
</root>

Обязательный XML: (XML 1 минус XML 2)

<root>
   <f>a</f>
</root>

Пожалуйста, помогите с этим запросом.

1 Ответ

1 голос
/ 17 апреля 2019

Если структура ввода проста и определена, как показано, вы можете просто выбрать root/f[not(. = $xml2/root/f)], чтобы получить f потомков, у которых нет элемента f в другом документе с тем же значением:

declare variable $xml2 as document-node() external := document {
<root>
   <f>b</f>
   <f>c</f>
</root>    
};

<root>
{
    root/f[not(. =  $xml2/root/f)]
}
</root>

https://xqueryfiddle.liberty -development.net / 948Fn5m / 1

Конечно, вы можете загрузить второй документ, используя doc('xml2.xml').

...