我正在尝试根据某些节点值比较两个 xml。
下面是两个xml:
一个.xml
<?xml version="1.0"?>
<catalog>
<cd>
<Test>a</Test>
<Test1>aa</Test1>
</cd>
<cd>
<Test>e</Test>
<Test1>ee</Test1>
</cd>
<cd>
<Test>f</Test>
<Test1>ff</Test1>
</cd>
<cd>
<Test>c</Test>
<Test1>cc</Test1>
</cd>
</catalog>
b.xml
<?xml version="1.0"?>
<catalog>
<cd>
<Test>a</Test>
<Test1>aa</Test1>
</cd>
<cd>
<Test>b</Test>
<Test1>bb</Test1>
</cd>
<cd>
<Test>c</Test>
<Test1>cc</Test1>
</cd>
</catalog>
我正在尝试使用Test的内容作为键来比较 xml。
下面是我正在使用的 xsl:
<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="Test"/>
<xsl:template match="/catalog">
<!-- This is working -->
<xsl:copy>
<xsl:copy-of select="cd[Test=document('a.xml')/catalog/cd/Test]"/>
</xsl:copy>
<!--This is not working-->
<xsl:copy>
<xsl:copy-of select="cd[Test=key('cd', cd/Test, document('a.xml'))/Test]"/>
</xsl:copy>
<!--This is returning node-set-->
<xsl:message>
<xsl:copy-of select="document('a.xml')/catalog/cd/Test"/>
</xsl:message>
<!--This is returning node-set-->
<xsl:message>
<xsl:copy-of select="key('cd', cd/Test, document('a.xml'))/Test"/>
</xsl:message>
</xsl:template>
</xsl:stylesheet>
根据测试节点值,xsl 的输出应该是两个 xml 中的公共节点。
但不确定为什么使用 xsl:key() 函数的那个不起作用。当我单独打印它时,它显示了正确的节点集。