我有两个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>
请协助处理此请求。
答案 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')
加载第二个文档。