I want to concat two xml file.Here is the input1.xml:\[code\]<schema> <sequence> <section id="xxx"> <nodeA id="a"> <fruit id="small"> <orange id="x" method="create"> <attributes> <color>Orange</color> <year>2000</year> </attributes> </orange> </fruit> </nodeA> <nodeB id="b"> <dog id="large"> <doberman id="x" method="create"> <condition> <color>Black</color> </condition> </doberman> </dog> </nodeB> </section> </sequence></schema>\[/code\]and here input2.xml\[code\]<schema> <sequence> <section id="xxx"> <nodeA id="a"> <fruit id="small"> <melon id="x" method="create"> <attributes> <color>Green</color> </attributes> </melon> </fruit> <lemon id="z" method="delete" /> </nodeA> <nodeA id="b"> <fruit id="small"> <lime id="x" method="create"> <attributes> <color>Yellow</color> <year>2001</year> </attributes> </lime> </fruit> </nodeA> <nodeB id="b"> <dog id="small"> <poodle id="x" method="create"> <condition> <color>White</color> </condition> </poodle> </dog> </nodeB> <nodeB id="c"> <dog id="small"> <terrier id="x" method="delete" /> </dog> </nodeB> </section> </sequence></schema>\[/code\]My output:\[code\]<schema> <sequence> <section id="xxx"> <nodeA id="a"> <fruit id="small"> <orange id="x" method="create"> <attributes> <color>Orange</color> <year>2000</year> </attributes> </orange> </fruit> <fruit id="small"> <melon id="x" method="create"> <attributes> <color>Green</color> </attributes> </melon> </fruit> <lemon id="z" method="delete"/> </nodeA> <nodeB id="b"> <dog id="large"> <doberman id="x" method="create"> <condition> <color>Black</color> </condition> </doberman> </dog> <dog id="small"> <poodle id="x" method="create"> <condition> <color>White</color> </condition> </poodle> </dog> </nodeB> </section> </sequence></schema>\[/code\]While the expected output is:\[code\]<schema> <sequence> <section id="xxx"> <nodeA id="a"> <fruit id="small"> <orange id="x" method="create"> <attributes> <color>Orange</color> <year>2000</year> </attributes> </orange> </fruit> <fruit id="small"> <melon id="x" method="create"> <attributes> <color>Green</color> </attributes> </melon> </fruit> <lemon id="z" method="delete"/> </nodeA> <nodeB id="b"> <dog id="large"> <doberman id="x" method="create"> <condition> <color>Black</color> </condition> </doberman> </dog> <dog id="small"> <poodle id="x" method="create"> <condition> <color>White</color> </condition> </poodle> </dog> </nodeB> <nodeA id="b"> <!-- I'm missing this node --> <fruit id="small"> <lime id="x" method="create"> <attributes> <color>Yellow</color> <year>2001</year> </attributes> </lime> </fruit> </nodeA> <nodeB id="c"> <!-- I'm missing this node --> <dog id="small"> <terrier id="x" method="delete" /> </dog> </nodeB> </section> </sequence></schema>\[/code\]The XSLT file is like this:\[code\]<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://a.com"> <xsl:strip-space elements="*" /> <xslutput indent="yes" method="xml" /> <xslaram name="input2"/> <xsl:variable name="to-merge" select="document($input2)" /> <xsl:function name="a:id"> <xslaram name="ctx"/> <xsl:value-of select="concat($ctx/local-name(), $ctx/@id)"/> </xsl:function> <xsl:key name="match" match="/schema/sequence/section/*" use="a:id(.)"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="*[count(. | key('match', a:id(.))) = count(key('match', a:id(.)))]"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> <xsl:variable name="id" select="a:id(.)"/> <xsl:for-each select="$to-merge"> <xsl:apply-templates select="key('match', $id)/*"/> </xsl:for-each> </xsl:copy> </xsl:template></xsl:stylesheet>\[/code\]How to modify the xslt file to produce the required output? The key here is to keep the order of the node. If node exist from file1, we combine it, and if it isn't we put it at the bottom according to the order how they appear.Thanks very much.John