[Home] [By Thread] [By Date] [Recent Entries]
Martin Honnen wrote:
Markus Flatscher wrote: I.e., for each input1//w, @n should be copied to the nearest following sibling <w> in input2 that matches .; <w>s in input2 that aren't in input1 should be flagged as "skipped". Here is a second attempt, more like what I wanted to implement <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: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"><xsl:number/></xsl:variable> <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="if ($match) then $skipped else $skipped + 1"/> </xsl:apply-templates> </xsl:template> </xsl:stylesheet> -- Martin Honnen http://msmvps.com/blogs/martin_honnen/
|

Cart



