检索XML子集

问题描述 投票:0回答:1

我有两个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>

请帮助这个请求。

xquery
1个回答
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')加载第二个文档。

© www.soinside.com 2019 - 2024. All rights reserved.