[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] xsl filter problem
Subject: Re: [xsl] xsl filter problem From: Mike Brown <mike@xxxxxxxx> Date: Thu, 26 Dec 2002 04:05:37 -0700 (MST) |
Yuval wrote: > My xml looks like this : > > <customers> > <customer> > <city>a</city> > <name>Jhon<name> > </customer> > <customer> > <city>b</city> > <name>Don<name> > </customer> > <customer> > <city>c</city> > <name>Ron<name> > </customer> > </customers> > > The data is to presented in a table and I want to filter it according to > the "city" - meaning I have 4 options : > 1.a > 2.b > 3.c > 4.all the cities = no filter > > Im using a html select box to let the user choose which city to filter > and the first option is "all cities".for this parameter I give the value > *. > > The xsl looks like this : > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > <xsl:output method="xml" encoding="windows-1255" /> > > <xsl:param name="city" /> > > <xsl:template match="/"> > <customers> > <xsl:for-each > select="customers/customer[city=$city]"> > <customer> > <xsl:for-each select="*"> > <xsl:element > name='{name()}'> > <xsl:value-of > select="." /> > </xsl:element> > </xsl:for-each> > </customer> > </xsl:for-each> > > </customers> > </xsl:template> > </xsl:stylesheet> > > When choosing "all cities" - the result is an empty table instead of the > list of all cities with the customers names. > I tried to giva the param "city" a diect value of "*" or " '*' " and it > still didn't work. > How can I pass a value to this param which will act like : <xsl:for-each > select="customers/customer[city=*]"> ?? Don't forget to quote the *. It looks to me like your conditions are as follows: If $city = '*', you want all customer elements. If $city != '*', you want all customer elements for which child::city = $city. Rephrase this into a test for each customer element: You want all customer elements for which: $city = '*' is true or child::city = $city The answer, unless I've overlooked something, is: customers/customer[$city='*' or city=$city] Another option is to let $city be an empty string to indicate "all cities". Then you'd use: customers/customer[not($city) or city=$city] Also note that instead of <xsl:element name="{name()}">...</xsl:element> you can use <xsl:copy>...</xsl:copy>. Mike -- Mike J. Brown | http://skew.org/~mike/resume/ Denver, CO, USA | http://skew.org/xml/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] xsl filter problem, Yuval | Thread | Re: [xsl] xsl filter problem, Dimitre Novatchev |
RE: [xsl] xsl filter problem, Yuval | Date | Re: [xsl] xsl filter problem, Dimitre Novatchev |
Month |