2012-10-19 142 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