[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: Re: [xsl] Incrementing a Global variable


Subject: Re: Re: [xsl] Incrementing a Global variable
From: Rajendra S Rawat <rajsrawat@xxxxxxxxx>
Date: Thu, 28 Aug 2003 22:29:04 -0700 (PDT)

I could not try ur solution

This is the error/msgbox I got 

---------------------------
XML Spy
---------------------------
XSL transformation failed due to following error:

Namespace 'http://exslt.org/common' does not contain
any functions.


---------------------------
OK   
---------------------------

--- Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> > Problem: print a list of students, grouping the
> students by their 
> > language and printing a blank line between each
> group.  Number the blank 
> > lines in addition to the lines with students'
> names.
> > 
> > So calling position() to get the number is
> insufficient, because 
> > position() doesn't count the blank lines.
> > 
> > Mukul was commenting that this problem would be
> easier to solve if XSLT 
> > supported something like variables. For example:
> 
> This is not a difficult problem and it doesn't
> deserve all this long thread.
> 
> Here's a simple two-pass solution:
> 
> 
> <xsl:stylesheet version="1.0"
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>  xmlns:ext="http://exslt.org/common"
>  >
>  <xsl:output method="html" indent="yes"/>
>  
>  <xsl:key name="kStudent" match="student"
> use="@nl"/>
>  
>   <xsl:template match="/">
>    <html>
>     <table>
>     <xsl:variable name="vrtfGrouped">
>      <xsl:for-each 
>       select="/*/student[generate-id()
>                      =
>                       generate-id(key('kStudent',
>                                       @nl
>                                       )[1]
>                                   )
>                       ]">
>        <xsl:copy-of select="key('kStudent', @nl)"/>
>      
>        <xsl:if test="not(position() = last())">
>         <blank/>
>        </xsl:if>
>     
>      </xsl:for-each>
>     </xsl:variable>
>    
>     <xsl:variable name="vGrouped" 
>         select="ext:node-set($vrtfGrouped)/*"/>
>    
>     <xsl:for-each select="$vGrouped">
>      <tr>
>        <td>
>          <xsl:value-of select="position()"/>
>        </td>
>        <td>
>          <xsl:value-of select="concat(@name, ' ')"/>
>        </td>
>      </tr>
>     </xsl:for-each>
>    </table>
>    </html>
>   </xsl:template>
> </xsl:stylesheet>
> 
> 
> When this transformation is applied e.g. on the
> following source.xml:
> 
> <t>
>  <student name="x" nl="English"/>
>  <student name="y" nl="German"/>
>  <student name="z" nl="English"/>
>  <student name="t" nl="French"/>
>  <student name="u" nl="English"/>
> </t>
> 
> the wanted result is produced:
> 
> 
> <html>
>   <table>
>     <tr>
>       <td>1</td>
>       <td>x </td>
>     </tr>
>     <tr>
>       <td>2</td>
>       <td>z </td>
>     </tr>
>     <tr>
>       <td>3</td>
>       <td>u </td>
>     </tr>
>     <tr>
>       <td>4</td>
>       <td> </td>
>     </tr>
>     <tr>
>       <td>5</td>
>       <td>y </td>
>     </tr>
>     <tr>
>       <td>6</td>
>       <td> </td>
>     </tr>
>     <tr>
>       <td>7</td>
>       <td>t </td>
>     </tr>
>   </table>
> </html>
> 
> 
> So what is the problem?
> 
> 
> =====
> Cheers,
> 
> Dimitre Novatchev.
> http://fxsl.sourceforge.net/ -- the home of FXSL
> 
> __________________________________
> Do you Yahoo!?
> Yahoo! SiteBuilder - Free, easy-to-use web site
> design software
> http://sitebuilder.yahoo.com
> 
>  XSL-List info and archive: 
> http://www.mulberrytech.com/xsl/xsl-list
> 


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords