|
Subject: RE: [xsl] [Fwd: CLARIFICATION IN XML 2 XML TRANSFORMATION] From: <Jarno.Elovirta@xxxxxxxxx> Date: Thu, 21 Oct 2004 11:06:20 +0300 |
Hi,
> I am transforming the XML one to another format. I have an
> instant in my
> input xml tree like below
>
> <cross-ref refid="bib2 bib4 bib5
> bib6"><sup>2,4–6</sup></cross-ref>.
>
> And, after the transformation I need result as below
>
> <sup><a href="#bib2">2</a>, <a href="#bib4">4</a>, <a
> href="#bib5">5</a>, <a href="#bib6">6</a></sup>
>
> Please advise, hot to achieve this.
<xsl:template match="cross-ref">
<sup>
<xsl:call-template name="tokenizer">
<xsl:with-param name="refids" select="@refid"/>
<xsl:with-param name="text">
<xsl:call-template name="expand">
<xsl:with-param name="text" select="."/>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</sup>
</xsl:template>
<xsl:template name="tokenizer">
<xsl:param name="refids" select="''"/>
<xsl:param name="text" select="''"/>
<xsl:choose>
<xsl:when test="contains($refids, ' ')">
<a href="#{substring-before($refids, ' ')}">
<xsl:value-of select="substring-before($text, ',')"/>
</a>
<xsl:text>, </xsl:text>
<xsl:call-template name="tokenizer">
<xsl:with-param name="refids" select="substring-after($refids, '
')"/>
<xsl:with-param name="text" select="substring-after($text, ',')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<a href="#{$refids}">
<xsl:value-of select="$text"/>
</a>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="expand">
<xsl:param name="text" select="''"/>
<xsl:choose>
<xsl:when test="contains($text, ',')">
<xsl:choose>
<xsl:when test="contains(substring-before($text, ','),
'–')">
<xsl:call-template name="range">
<xsl:with-param name="start" select="substring-before($text,
'–')"/>
<xsl:with-param name="end"
select="substring-before(substring-after($text, '–'), ',')"/>
</xsl:call-template>
<xsl:text>,</xsl:text>
<xsl:call-template name="expand">
<xsl:with-param name="text" select="substring-after($text,
',')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($text, ',')"/>
<xsl:text>,</xsl:text>
<xsl:call-template name="expand">
<xsl:with-param name="text" select="substring-after($text,
',')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="contains($text, '–')">
<xsl:call-template name="range">
<xsl:with-param name="start" select="substring-before($text,
'–')"/>
<xsl:with-param name="end" select="substring-after($text,
'–')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="range">
<xsl:param name="start" select="0"/>
<xsl:param name="end" select="0"/>
<xsl:choose>
<xsl:when test="not($start = $end)">
<xsl:value-of select="$start"/>
<xsl:text>,</xsl:text>
<xsl:call-template name="range">
<xsl:with-param name="start" select="$start + 1"/>
<xsl:with-param name="end" select="$end"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$start"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Cheers,
Jarno - Suicide Commando: Face Of Death (Waking Up The Dancefloor Mix by
Implant)
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] [Fwd: CLARIFICATION IN XML 2 , Arul Kumar | Thread | [xsl] copy of attributes, news |
| RE: [xsl] CDATA in XSLT, Arun Sinha | Date | [xsl] copy of attributes, news |
| Month |