Hai
Based on Michael points i have updated the XSL but I am not getting
any output. Please help me.
<xsl:template match="map">
<xsl:if test="count(child::source) = count(child::target) and
count(child::*) != 2">
<xsl:variable name="pos"><xsl:value-of
select="target[position()]"/></xsl:variable>
<mac:template match="{source[$pos]}">
<mac:element name="{target[$pos]}">
<xsl:for-each
select="target[$pos > 1]">
<mac:attribute
name="substring-after({target[$pos]},'@')">
<mac:value-of
select="(preceding-sibling::source)[$pos]"/>
</mac:attribute>
</xsl:for-each>
<mac:apply-templates
select="@*|node()"/>
</mac:element>
</mac:template>
</xsl:if>
</xsl:template>
Regards,
Ganesh
On Wed, Nov 26, 2008 at 4:31 PM, Michael Kay <mike(_at_)saxonica(_dot_)com>
wrote:
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(_at_)gmail(_dot_)com]
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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--