XSLT:一种简单的方法来合并XML文件

我有两个XML文件。 我需要将它们合并到两个元素“myid”匹配的位置。 请看看这些示例文件…

File1.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <data> <title>Title1</title> <description>Description1</description> <myid>1</myid> </data> <data> <title>Title2</title> <description>Description2</description> <myid>2</myid> </data> </catalog> 

File2.xml:

 <?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <data> <author>Author1</author> <date>12/34/5678</date> <myid>1</myid> </data> <data> <author>Author2</author> <date>87/65/4321</date> <myid>2</myid> </data> </catalog> 

生成的文件如下所示:

 <?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <data> <title>Title1</title> <description>Description1</description> <myid>1</myid> <author>Author1</author> <date>12/34/5678</date> </data> <data> <title>Title2</title> <description>Description2</description> <myid>2</myid> <author>Author2</author> <date>87/65/4321</date> </data> </catalog> 

我一直在研究一下,发现了一个相当类似的问题: http : //forums.tizag.com/showthread.php?p=76699

这是我想出来的,这似乎是主要工作,除了Firefox不认识到它是一个XML文件,即使我已经添加了XML:输出。

File1.xml(注意第二行,引用我们的转换):

 <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="merge.xsl"?> <catalog> <data> <title>Title1</title> <description>Description1</description> <myid>1</myid> </data> <data> <title>Title2</title> <description>Description2</description> <myid>2</myid> </data> </catalog> 

File2.xml:

 <?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <data> <author>Author1</author> <date>12/34/5678</date> <myid>1</myid> </data> <data> <author>Author2</author> <date>87/65/4321</date> <myid>2</myid> </data> </catalog> 

merge.xsl:

 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" /> <xsl:variable name="with" select="'File2.xml'" /> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:template> <xsl:template match="scene"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> <xsl:variable name="info" select="document($with)/catalog/data[myid=current()/myid]/." /> <xsl:for-each select="$info/*"> <xsl:if test="name()!='myid'"> <xsl:copy-of select="." /> </xsl:if> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:transform> 

查看File1.xml时输出xml:

 <catalog> <data> <title>Title1</title> <description>Description1</description> <myid>1</myid> <author>Author1</author> <date>12/34/5678</date> </data> <data> <title>Title2</title> <description>Description2</description> <myid>2</myid> <author>Author2</author> <date>87/65/4321</date> </data> </catalog>