2012-10-19 71 views
0

我想用两个xml文件连接两个xml文件,同时使用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> 

回答

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> 
+0

非常感谢!它的工作恰到好处! – user1760340