[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[xsl] multiple range expansion
Subject: [xsl] multiple range expansion From: Ganesh Babu N <nbabuganesh@xxxxxxxxx> Date: Mon, 22 Jun 2009 14:11:47 +0530 |
Dear All, I am having the following inputs: 1. <cross-ref>[<cr refid="MEP_L_bib5">5</cr>-<cr refid="MEP_L_bib7">7</cr>, <cr refid="MEP_L_bib21">21</cr>-<cr refid="MEP_L_bib24">24</cr>]</cross-ref> 2. <cross-ref>[<cr refid="MEP_L_bib2">2</cr>,<cr refid="MEP_L_bib4">4</cr>]</cross-ref> 3. <cross-ref>[<cr refid="MEP_L_bib5">5</cr>-<cr refid="MEP_L_bib7">7</cr>]</cross-ref> the required output is as follows: 1. <cross-refs refid="bib5 bib6 bib7 bib21 bib22 bib23 bib24">[5-7, 21-24]</cross-refs> 2. <cross-refs refid="bib2 bib4">[2, 4]</cross-refs> 3. <cross-refs refid="bib5 bib6 bib7">[5-7]</cross-refs> I have tried this with the following code: <xsl:template match="cross-ref"> <xsl:choose> <xsl:when test="contains(.,'-')"> <ce:cross-refs> <xsl:attribute name="refid"> <xsl:if test="cr/@refid[contains(., 'bib')]"> <xsl:variable name="start" select="cr[following-sibling::text()[1] = '-']/@refid/xs:integer(substring-after(.,'MEP_L_bib'))"/> <xsl:variable name="end" select="cr[preceding-sibling::text()[1] = '-']/@refid/xs:integer(substring-after(.,'MEP_L_bib'))"/> <xsl:value-of select="for $i in $start to $end return concat('bib', $i)"/> </xsl:if> </xsl:attribute> <xsl:apply-templates/> </ce:cross-refs> </xsl:when> <xsl:otherwise> <ce:cross-refs> <xsl:attribute name="refid"> <xsl:value-of select="substring-after(cr[1]/@refid,'MEP_L_')"/> <xsl:for-each select="cr[position() != 1]"> <xsl:text> </xsl:text> <xsl:value-of select="substring-after(@refid,'MEP_L_')"/> </xsl:for-each> </xsl:attribute> <xsl:apply-templates/> </ce:cross-refs> </xsl:otherwise> </xsl:choose> </xsl:template> When I execute the above code i am getting the following error: XPTY0004: A sequence of more than one item is not allowed as the first operand of 'to' (5, 21) I have tried with <xsl:for-each select="$start and $end"> <xsl:value-of select="for $i in $start to $end return concat('bib', $i)"/> </xsl:for-each> Even this also not working. Please help me in the solving the above problem. Regards, Ganesh
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] XSLT 1.0 and EXSLT node-set f, Hermann Stamm-Wilbra | Thread | Re: [xsl] multiple range expansion, G. Ken Holman |
[xsl] XSLT 1.0 and EXSLT node-set f, Hermann Stamm-Wilbra | Date | [xsl] Xpath errors in XML to XML tr, Catherine Pouncett |
Month |