我想在使用xsl删除具有重复名称的条目(即使值不同)的同时连接两个xml文件。请参阅示例文件。非常感谢你的帮助。
File1.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<archive>
<entry>
<name>xxx</name>
<value>123</value>
</entry>
<entry>
<name>yyy</name>
<value>456</value>
</entry>
<entry>
<name>zzz</name>
<value>789</value>
</entry>
</archive>
File2.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<archive>
<entry>
<name>xxx</name>
<value>2468</value>
</entry>
<entry>
<name>ttt</name>
<value>13579</value>
</entry>
</archive>
生成的文件应如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<archive>
<entry>
<name>xxx</name>
<value>123</value>
</entry>
<entry>
<name>yyy</name>
<value>456</value>
</entry>
<entry>
<name>zzz</name>
<value>789</value>
</entry>
<entry>
<name>ttt</name>
<value>13579</value>
</entry>
</archive>
答案 0 :(得分:3)
此转化:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pDoc1" select="document('file:///c:/temp/delete/file1.xml')"/>
<xsl:param name="pDoc2" select="document('file:///c:/temp/delete/file2.xml')"/>
<xsl:template match="/">
<xsl:apply-templates select="$pDoc1/*"/>
</xsl:template>
<xsl:template match="/*">
<archive>
<xsl:copy-of select="node()"/>
<xsl:copy-of select="$pDoc2/*/entry[not(name = current()/*/name)]"/>
</archive>
</xsl:template>
</xsl:stylesheet>
应用于任何XML文档(未使用)并具有包含此内容的文件(如提供的):
C:\ TEMP \删除\ file1.xml
<archive>
<entry>
<name>xxx</name>
<value>123</value>
</entry>
<entry>
<name>yyy</name>
<value>456</value>
</entry>
<entry>
<name>zzz</name>
<value>789</value>
</entry>
</archive>
C:\ TEMP \删除\ file2.xml
<archive>
<entry>
<name>xxx</name>
<value>2468</value>
</entry>
<entry>
<name>ttt</name>
<value>13579</value>
</entry>
</archive>
生成想要的正确结果:
<archive>
<entry>
<name>xxx</name>
<value>123</value>
</entry>
<entry>
<name>yyy</name>
<value>456</value>
</entry>
<entry>
<name>zzz</name>
<value>789</value>
</entry>
<entry>
<name>ttt</name>
<value>13579</value>
</entry>
</archive>