xsl-list
[Top] [All Lists]

RE: variable in filter doesn't work??

2002-09-20 10:33:59
[Carter, Will]

why doesn't this work?
-----------------------
<xsl:variable name="filter" select='"cat = 
&apos;zoro&apos;"'/> <xsl:value-of 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>

Aside from the fact that you have omitted the contents on the
xsl:for-each start tag so we cannot be sure what you wrote, you cannot
use a variable as a path expression.  You are probably saying the
equivalent of

<xsl:for-each select='person["cat=&apos;zoro&apos;"]'>

This does not do any filtering because the predicate has to be either a
number (to select a particular node by its position) or an expression.
An expression gets evaluated as a boolean.  A non-empty string evaluates
to "true", so your statement is equivalent to

<xsl:for-each select='person[true]'>

This will select all person nodes as you have seen.

You could write

<xsl:variable name='filter' select='"zoro"'/>
<xsl:for-each select='person[cat=$filter]'>

This is not quite what you are after,it seems.  You could get the effect
you are trying for this way:

<xsl:variable name='filter-element' select='"cat"'/>
<xsl:variable name='filter-value' select='"zoro"'/>
<xsl:for-each select="person[*[name()=$filter-element and
text()=$filter-value]]">

Cheers,

Tom P

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



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