[Home] [By Thread] [By Date] [Recent Entries]
Markus Flatscher wrote:
Suppose I have two inputs like so, where input1//w is always a subset of input2//w: I tried it like this: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"> <xsl:param name="inp1" as="xs:string" select="'input1.xml'"/> <xsl:variable name="input1" as="element(input1)" select="document($inp1)/input1"/> <xsl:output method="xml" indent="yes"/> <xsl:key name="k1" match="input1/w" use="."/> <xsl:template match="input2">
<output>
<xsl:apply-templates select="w[1]">
<xsl:with-param name="skipped" select="0"/>
</xsl:apply-templates>
</output>
</xsl:template><xsl:template match="input2/w"> <xsl:param name="skipped" as="xs:integer"/> <xsl:variable name="pos" as="xs:integer" select="position()"/> <xsl:variable name="match" select="$input1/w[$pos + $skipped][. = current()]"/> <w n="{if ($match) then $match/@n else 'skipped'}"> <xsl:value-of select="."/> </w> <xsl:apply-templates select="following-sibling::w[1]"> <xsl:with-param name="skipped" select="$skipped + count($match)"/> </xsl:apply-templates> </xsl:template> </xsl:stylesheet> That assumes your longer sequence as the primary input document and the shorter as input parameter. -- Martin Honnen http://msmvps.com/blogs/martin_honnen/
|

Cart



