XSLT - Merge 2 XML Files That DONT Have Common ID

freebee

New Member
I would like to join two xml files as illustrated below. However the question i have is how do you do this with having an ID to join with. I want to do the join in regards to POSITION and not id. How would you do this for the following files?File 1:\[code\]<?xml version="1.0" encoding="ISO-8859-1"?><catalog> <data> <title>Title1</title> <description>Description1</description> </data> <data> <title>Title2</title> <description>Description2</description> </data></catalog>\[/code\]File 2:\[code\]<?xml version="1.0" encoding="ISO-8859-1"?><catalog> <data> <author>Author1</author> <date>12/34/5678</date> </data> <data> <author>Author2</author> <date>87/65/4321</date> </data></catalog>\[/code\]Output:\[code\]<?xml version="1.0" encoding="ISO-8859-1"?><catalog> <data> <title>Title1</title> <description>Description1</description> <author>Author1</author> <date>12/34/5678</date> </data> <data> <title>Title2</title> <description>Description2</description> <author>Author2</author> <date>87/65/4321</date> </data></catalog>\[/code\]I know how to do this if you have a common \[code\]ID\[/code\] field using the XSLT below, however how do you join on POSITION?\[code\]<?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[id=current()/id]/." /> <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>\[/code\]
 
Back
Top