RE: [xsl] position matching

Subject: RE: [xsl] position matching
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 26 Nov 2008 11:01:50 -0000
Two obvious errors, excluding typos:

(1) target[position() > 2] should be target[position() > 1]

(2) preceding-sibling::source[position()] - you've forgotten that the
context inside a predicate changes. You need to bind position() to a
variable p outside the expression and then use
preceding-sibling::source[$p]. Or in fact I suspect it should be
(preceding-sibling::source)[$p] because you want them numbered in forwards
rather than reverse order.

Michael Kay
http://www.saxonica.com/

 

> -----Original Message-----
> From: Ganesh Babu N [mailto:nbabuganesh@xxxxxxxxx] 
> Sent: 26 November 2008 10:52
> To: XSL
> Subject: [xsl] position matching
> 
> Hai All,
> 
> I am working on automatic XSLT generation project and here is 
> the mapping table.
> 
> Here is my XML file:
>  <map>
>       <source>article</source>
>       <source>@docsubtype</source>
>       <source>@version</source>
>       <target>article</target>
>       <target>@article-type</target>
>       <target>@dtd-version</target>
>    </map>
> 
> My stylesheet:
> 
> <xsl:template match="map">
> <xsl:if test="count(child::source) = count(child::target) and
> count(child::*) != 2">
> <mac:template match="{source[1]}">
> <mac:element name="{target[1]}">
> <xsl:for-each select="target[position() > 2"> <mac:attribute 
> name="substring-after({target},'@')"><mac:value-of
> select="preceding-sibling::source[position()]"/></mac:attribute>
> <xsl:for-each>
> <mac:apply-templates select="@*|node()"/> </mac:element> 
> </mac:template> </xsl:if> </xsl:template>
> 
> Expected Output:
> 
> <xsl:template match="article>
> <xsl:element name="article">
> <xsl:attribute name="article-type"><xsl:value-of 
> select="@docsubtype"></xsl:attribute>
> <xsl:attribute name="@dtd-version"><xsl:value-of 
> select="@version"></xsl:attribute>
> </xsl:element>
> <xsl:template>
> 
> 
> I am not getting the desired result. Please let me know where 
> I am going wrong.
> 
> Regards,
> Ganesh

Current Thread