Subject: Re: [xsl] Aligning/merging two sequences From: Markus Flatscher <markus.flatscher@xxxxxxxxxxxx> Date: Thu, 30 Sep 2010 15:18:17 -0400 |
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>
-- Markus Flatscher, Project Editor ROTUNDA, The University of Virginia Press PO Box 400314, Charlottesville VA 22904, USA Courier: 211 Emmet Street South, Charlottesville VA 22903, USA Email: markus.flatscher@xxxxxxxxxxxx Web: http://rotunda.upress.virginia.edu/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Aligning/merging two sequ, Martin Honnen | Thread | [xsl] Hyphenation code, Dave Pawson |
Re: [xsl] Aligning/merging two sequ, Martin Honnen | Date | [no subject], Unknown |
Month |