Re: [xsl] how find out end position using 'for' loop

Subject: Re: [xsl] how find out end position using 'for' loop
From: Olivier Jeulin <olivier.jeulin@xxxxxxxxx>
Date: Wed, 15 Jun 2011 00:14:26 +0200
Le 14/06/2011 06:47, JS Rawat a C)crit :
Hi Everybody,
Have anyone any idea about the below problem. I want + sign between two RefArray (RefArray[11] + RefArray[12]) but not in the last (RefArray[12]+ RefArray[13]+ should be RefArray[12]+ RefArray[13]).

Input
<link class="bibcit" rid="FileName_bib11">11&#x2013;13</link>

XSLT

<xsl:template match="link">
  <xsl:choose>
   <xsl:when test="@class='bibcit'">
      <xsl:variable name="bibtext" select="."/>
      <xsl:choose>
       <xsl:when test="contains($bibtext, '&#x2013;') and substring-before($bibtext,'&#x2013;') castable as xs:integer">
         <xsl:variable name="start" select="xs:integer(substring-before($bibtext,'&#x2013;'))"/>
         <xsl:variable name="end" select="xs:integer(substring-after($bibtext,'&#x2013;'))"/>
         <a class="bibcit" href="references.htm#{substring-after(@rid,'_')}" onmouseout="startTimeout()">
          <xsl:attribute name="onmouseover">refpopup('REF',<xsl:value-of select="for $i in $start to $end return concat('RefArray[',$i,']+')"/>)</xsl:attribute><xsl:apply-templates/></a>
       </xsl:when>
      </xsl:choose>
    </xsl:when>
   </xsl:choose>
</xsl:template>

OUTPUT
<a class="bibcit" href="references.htm#bib11" onmouseout="startTimeout()" onmouseover="refpopup('REF',RefArray[11]+ RefArray[12]+ RefArray[13]+)">11C"b,b13</a>


Desired OUTPUT <a class="bibcit" href="references.htm#bib11" onmouseout="startTimeout()" onmouseover="refpopup('REF',RefArray[11]+ RefArray[12]+ RefArray[13])">11C"b,b13</a>

Hi
Another (better?) answer:
<xsl:value-of select="string-join(for $i in $start to $end return concat('RefArray[',$i,']'), '+')"/>


string-join() does exactly what you want : add a separator between strings.


You could also use <xsl:text> for your text values. Doing that allows you to (auto-)indent your text, it's a lot easier to read:
<a class="bibcit" href="references.htm#{substring-after(@rid,'_')}" onmouseout="startTimeout()">
<xsl:attribute name="onmouseover">
<xsl:text>refpopup('REF',</xsl:text>
<!--<xsl:value-of select="for $i in $start to $end return concat('RefArray[',$i,']+')"/>-->
<xsl:value-of select="string-join(for $i in $start to $end return concat('RefArray[',$i,']'), '+')"/>
<xsl:text>)</xsl:text>
</xsl:attribute>
<xsl:apply-templates/>
</a>


--
Regards,
Olivier Jeulin

Current Thread