RE: [xsl] Can not convert number to a NodeList

Subject: RE: [xsl] Can not convert number to a NodeList
From: "Aron Bock" <aronbock@xxxxxxxxxxx>
Date: Sun, 12 Jun 2005 03:22:20 +0000
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@xxxxxxxxxxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
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/


Current Thread