我有两个XML文件:
文件" a":
<?xml version="1.0"?>
<catalog>
<cd>d</cd>
<cd>e</cd>
<cd>f</cd>
<cd>c</cd>
</catalog>
文件&#34; b&#34;:
<?xml version="1.0"?>
<catalog>
<cd>a</cd>
<cd>b</cd>
<cd>c</cd>
</catalog>
我想将文件b
与文件a
进行比较,并获取仅存在于文件b
中的记录。
即。预期产出是:
<?xml version="1.0"?>
<catalog>
<cd>a</cd>
<cd>b</cd>
</catalog>
答案 0 :(得分:2)
如果您可以使用XSLT 2.0,那么可以使用键非常简单(并且有效)地完成此操作。假设您正在处理“b”文件:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:key name="cd" match="cd" use="." />
<xsl:template match="/catalog">
<xsl:copy>
<xsl:copy-of select="cd[not(key('cd', ., document('a.xml')))]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
一个简单的解决方案如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:param name="compareWith" select="'a.xml'"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="cd">
<xsl:if test="not(document($compareWith)//cd = .)">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
重点是我们检查要比较的文档中是否存在实际的cd
内容($compareWith
)