xsl-list
[Top] [All Lists]

RE: filter based on parameter, not getting it.

2002-09-20 15:21:03
okay, here is my attempt...not working...very frustrating.

my error: Can not convert #STRING to a NodeList!

<xsl:param name="filterparam"/>

<!-- try to take the if condition out of the test template -->
<xsl:template match="/">
<xsl:choose>
        <xsl:when test="string-length($filterparam) = 0">
                <xsl:call-template name="test">
                        <!-- trying to call the test template with no filter -->
                        <xsl:with-param name="filter" 
select="//person"></xsl:with-param>
                </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
                <xsl:call-template name="test">
                        <!-- trying to call the test template with the 
filterparam as the filter -->
                        <xsl:with-param name="filter" select="//person[cat = 
$filterparam]"></xsl:with-param>
                </xsl:call-template>
        </xsl:otherwise>
</xsl:choose>
</xsl:template>


<xsl:template name="test" match="/">
<xsl:param name="filter"/>
<xsl:variable name="filter" select="$filter"/>
<table>
        <xsl:for-each select="$filter">
        <tr>
                <td><xsl:value-of select="cat"/></td>
                <td><xsl:value-of select="dog"/></td>
                <td><xsl:value-of select="fish"/></td>
        </tr>
        </xsl:for-each>
</table>
</xsl:template>



-----Original Message-----
From: Passin,Thomas B. (Tom) [mailto:tpassin(_at_)mitretek(_dot_)org]
Sent: Friday, September 20, 2002 3:27 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] filter based on parameter, not getting it.


[Carter, Will]

This code doesn't work:

<table>
      <xsl:for-each select="$filter">

<!--===============================================
        Here is the problem.  The variable is out of scope - it is only
in scope in your xsl:when or xsl:otherwise element.  Therfore the
variable does not
exist for the code below.
   ==================================================-->


      <tr>
              <td><xsl:value-of select="cat"/></td>
              <td><xsl:value-of select="dog"/></td>
              <td><xsl:value-of select="fish"/></td>
      </tr>
      </xsl:for-each>
</table>
---------------------------------------------------------

Restructure your stylesheet so that you call a named template (or
apply-templates) to create the table cells, and pass in the $filter
variable as a parameter to the template.

Cheers,

Tom P

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


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