<?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet href="../make-menu.xsl" type="text/xsl"?><html> <head> <this-is section="xsl-elements" page="merge" subpage=""/> <!-- Generated at 2011-12-09T20:47:22.916Z--><title>Saxonica: XSLT and XQuery Processing: xsl:merge</title> <meta name="coverage" content="Worldwide"/> <meta name="copyright" content="Copyright Saxonica Ltd"/> <meta name="title" content="Saxonica: XSLT and XQuery Processing: xsl:merge"/> <meta name="robots" content="noindex,nofollow"/> <link rel="stylesheet" href="../saxondocs.css" type="text/css"/> </head> <body class="main"> <h1>xsl:merge</h1> <p>The <code>xsl:merge</code> instruction is new in XSLT 3.0, and is first implemented in Saxon-EE 9.4. The purpose of the instruction is to allow streamed merging of two or more pre-sorted input files, but the current implementation in Saxon is unstreamed.</p> <p>Each kind of input source is described in an <code>xsl:merge-source</code> child element of the <code>xsl:merge</code> instruction; and the instances of that kind of input source are selected in a <code>xsl:merge-input</code> child of the <code>xsl:merge-source</code> element. The processing to be carried out on each group of input items sharing a value for the merge key is defined in a <code>xsl:merge-action</code> element.</p> <p>The following example merges a homogenous collection of log files, each already sorted by timestamp:</p> <div class="codeblock" style="border: solid thin; background-color: #B1CCC7; padding: 2px"> <pre> <code> <xsl:merge> <xsl:merge-source select="collection('log-collection')"> <xsl:merge-input select="events/event"/> <xsl:merge-key select="@timestamp" order="ascending"/> </xsl:merge-source> <xsl:merge-action> <xsl:sequence select="current-group()"/> </xsl:merge-action> </xsl:merge></code> </pre> </div> <p>The following example merges two log files with different internal structure:</p> <div class="codeblock" style="border: solid thin; background-color: #B1CCC7; padding: 2px"> <pre> <code> <xsl:merge> <xsl:merge-source select="doc('log1.xml')"> <xsl:merge-input select="transactions/transaction"/> <xsl:merge-key select="xs:dateTime(@date, @time)" order="ascending"/> </xsl:merge-source> <xsl:merge-source select="doc('log2.xml')"> <xsl:merge-input select="eventdata/transfer"/> <xsl:merge-key select="@timestamp" order="ascending"/> </xsl:merge-source> <xsl:merge-action> <xsl:apply-templates select="current-group()"/> </xsl:merge-action> </xsl:merge></code> </pre> </div> <p>The function <code>current-merge-inputs()</code> is not yet implemented.</p> <table width="100%"> <tr> <td> <p align="right"><a class="nav" href="merge-action.xml">Next</a></p> </td> </tr> </table> </body> </html>