Subject: RE: XPath predicate test and parameter problem
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Tue, 30 Sep 2003 18:10:35 +0100
|
because you don't have any states called '$st'. Try removing the quotes.
select="row[state=$st]/city"
(Perhaps you are imagining that variables in XPath are macros,
implemented using textual substitution? They aren't: they are regular
values: you can use a variable reference anywhere you can use an
expression, and nowhere else).
Michael Kay
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> cknell@xxxxxxxxxx
> Sent: 30 September 2003 17:42
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject: XPath predicate test and parameter problem
>
>
> This is making me crazy. I can't figure out where I'm failing.
>
> Given this data document:
> <?xml version="1.0" encoding="UTF-8" ?>
> <rowset>
> <row>
> <city>Des Moines</city>
> <state>IA</state>
> </row>
> <row>
> <city>Pittsburgh</city>
> <state>PA</state>
> </row>
> <row>
> <city>Milwaukee</city>
> <state>WI</state>
> </row>
> </rowset>
>
> Why does this stylesheet produce the output "Milwaukee",
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="xml" indent="yes" encoding="UTF-8" />
>
> <xsl:template match="/">
> <xsl:apply-templates select="rowset">
> <xsl:with-param name="st" select="'WI'" />
> </xsl:apply-templates>
> </xsl:template>
>
> <xsl:template match="rowset">
> <xsl:param name="st" />
> <xsl:value-of select="row[state='WI']/city" /> </xsl:template>
>
> </xsl:stylesheet>
>
> and this one, only '<?xml version="1.0" encoding="UTF-8" ?>',
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="xml" indent="yes" encoding="UTF-8" />
>
> <xsl:template match="/">
> <xsl:apply-templates select="rowset">
> <xsl:with-param name="st" select="'WI'" />
> </xsl:apply-templates>
> </xsl:template>
>
> <xsl:template match="rowset">
> <xsl:param name="st" />
> <xsl:value-of select="row[state='$st']/city" /> </xsl:template>
>
> </xsl:stylesheet>
>
> To save you the trouble of minutely examining the two, the
> difference is that in the one that doesn't work the way I
> think it should, I use the value of the parameter to test the
> content of the "state" element, where in the one that
> produces the output I want, I use the literal string 'WI'.
>
> Thanks.
>
>
> --
> Charles Knell
> cknell@xxxxxxxxxx - email
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|