xsl-list
[Top] [All Lists]

RE: Can not convert number to a NodeList

2005-06-11 20:22:20
Carlos,

I believe the prior respondent mentioned 2 ways to achieve what you want: recursively write out rows and col or, if using for-each, supply for the "rows" a nodeset equal to the number of @lines. The second approach is described below (and for simplicity we derive # cols ):

With this input:

<data>
   <radio line="1">
       <opt>Masc</opt>
       <opt>Fem</opt>
       <opt>other</opt>
       <opt>Masc2</opt>
       <opt>Fem2</opt>
       <opt>other2</opt>
   </radio>
</data>

This XSL:

<?xml version="1.0" encoding="iso8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
   <xsl:output method="xml" indent="yes"/>
   <xsl:strip-space elements="*"/>

   <xsl:template match="radio">
       <table>
           <xsl:variable name="numcols" select="count(opt) div @line"/>
           <xsl:for-each select="opt[position() &lt;= current()/@line]">
               <xsl:variable name="r" select="position() - 1"/>
               <tr>
<xsl:apply-templates select="../opt[position() &gt;= $r * $numcols + 1
                       and position() &lt;= $r * $numcols + $numcols ]"/>
               </tr>
           </xsl:for-each>
       </table>
   </xsl:template>

   <xsl:template match="opt">
       <td><xsl:value-of select="."/></td>
   </xsl:template>

</xsl:stylesheet>


produces:

<?xml version="1.0" encoding="UTF-8"?>
<table>
 <tr>
   <td>Masc</td>
   <td>Fem</td>
   <td>other</td>
   <td>Masc2</td>
   <td>Fem2</td>
   <td>other2</td>
 </tr>
</table>

If you change @lines to 2, you should get 2 rows.

This may not work for @lines = sqrt( 2 )

Regards,

--A


From: "Carlos M. S. Bento Nogueira" 
<cmsbn(_at_)student(_dot_)dei(_dot_)uc(_dot_)pt>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Can not convert number to a NodeList
Date: Sun, 12 Jun 2005 03:00:36 +0100 (WEST)

I believed Michael Kay pointed the solution i'll use(switch to xslt 2.0).
I will be testing if and how i can use xslt 2.0 with apache cocoon 2.1.7.

What i basically wanted was to insert as many <tr> tags as lines and as many <td> tags as columns between the list elements. I cannot do it neither on form1.xml nor on form1_template_action.xml(here the elements on form1 are called). The line and column parameters are being passed from form1_template_action.xml
to forms-field-styling.xsl.

Note that i also cannot insert <line> or <row> tabs between elements on form1.xml.


 form1.xml
 <fd:widget>
 (..)
 <fd:field id="sexo_opcoes">
       <fd:selection-list>
               <fd:item value="Masc."/>
               <fd:item value="Fem."/>
               <fd:item value="Other."/>
 -----------------------------------------------------
 form1_template_action.xml
 <fi:group>
 <fi:styling type="tabs"/>
       <fi:items>
               <fi:group> (each group represents one tab)
 (...)
 <table border="0">
 <tr>
 <td>
 <ft:widget id="sexo_opcoes">
<fi:styling list-type="radio" list-orientation="horizontal" line="1" column="3">
 (...)
 ---------------------------------------------------
 forms-field-styling.xsl

 <xsl:stylesheet version="1.0"....>
<xsl:template match="fi:field[fi:selection-list][fi:styling/@list-type='radio']" priority="2">
 <xsl:variable name="column" select="number(fi:styling/@column)"/>
 <xsl:variable name="line" select="number(fi:styling/@line)"/>
 (...)

 <xsl:for-each select="$line">
        <xsl:for-each select="$column">
                <td><xsl:text>C</xsl:text></td>
        </xsl:for-each>

        <xsl:if test="$line&gt;1">
                <tr><xsl:text>L</xsl:text></tr>
        </xsl:if>
 </xsl:for-each>
----------------------------------------------------------
Desired HTML output example:
(...)
<table border="0">
<tr>
<td>
        label: sexo
</td>
<td>
        Masc.
</td>
<td>
        Fem.
</td>
<td>
        Other
</td>

Thanks for your support and time,
CarlosN.


On Sat, 11 Jun 2005, Aron Bock wrote:

Carlos, you may want to include the relevant snippet of your input XML, desired output, and your calling environment since you say " this variables are numbers that must be passed to my xsl file."

Regards,

--A

_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today - it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/


--~------------------------------------------------------------------
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>
--~--



<Prev in Thread] Current Thread [Next in Thread>