检索XML子集

时间:2019-04-17 08:34:12

标签: xquery

我有两个XML。 XML 1和xml2。xml 2是XML 1的子集。我需要获得一个最终XML,该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 个答案:

答案 0 :(得分:1)

如果输入结构像所示的那样简单和定义,您可以简单地选择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')加载第二个文档。