|
Subject: RE: [xsl] Problem Dynamically Building Query String In XSLT 1.0 From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 31 Jul 2007 17:38:29 +0100 |
Given the limitations of 1.0, where you can't manipulate sequences of
strings, or create and then process temporary trees, I would do:
<xsl:variable name="u">
<xsl:text>pagename.aspx?</xsl:text>
<xsl:if test="$varTarget">
<xsl:text>target=</xsl:text>
<xsl:value-of select="$varTarget">
<xsl:text>&</xsl:text>
</xsl:if>
<xsl:if test="$varPage">
<xsl:text>page=</xsl:text>
<xsl:value-of select="$varPage">
<xsl:text>&</xsl:text>
</xsl:if>
.. repeat for other parameters
</xsl:variable>
<xsl:value-of select="substring($u, 1, string-length($u - 1))"/>
that is, add an & after every parameter, then at the end strip off the last
character of the string.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Trish@xxxxxxxxxxxxxx [mailto:Trish@xxxxxxxxxxxxxx]
> Sent: 31 July 2007 17:25
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Problem Dynamically Building Query String In XSLT 1.0
>
> Hi:
>
> I need to construct a query string of an unknown number of
> parts. I have to use XSLT 1.0. We are also purposefully not
> using any asp in the template, so I have to rely on XSLT 1.0
> functionality alone.
>
> My problem is detecting whether or not the element I'm adding
> to the query string is the first element and therefore
> requires a "?" in front of it or whether I should use "&" instead.
>
> For instance, here's a possible URL that I want to build:
>
> pagename.aspx?page=2&sort=default&target=newpagename.aspx
>
> When I'm building the string, none or part or all of the
> possible query string elements may be present. In the
> interest of keeping the query string as short as possible, I
> don't want to show any of the elements that don't have values
> (aye, there's the rub). I also don't want to have one of the
> elements always present so it is always first and eliminates
> the problem of whether to add the & or the ?.
>
> My attempts so far have been REALLY ugly as they are
> repetitious and code heavy, as you'll see below, as well as
> totally unsuccessful. Has anyone else come up with a better
> way to do this?
>
> Here's my last desperate attempt (the variable names used are
> the possible values for the query string elements and are
> defined elsewhere). I was trying to change the value of
> $paramQueryMark by submitting as a parameter to queryMark,
> but the value of the parameter is lost when I go back to queryBuilder:
>
> <xsl:value-of select="$varPage" />
> <xsl:call-template name="queryBuilder" />
>
> <xsl:template name="queryBuilder">
> <xsl:param name="paramQueryMark" select="'false'" />
> <xsl:if test="string($varTarget) or
> string($varPageNumber) or string($varSortSelected)">
> <xsl:text>?</xsl:text>
> </xsl:if>
> <xsl:if test="string($varTarget)">
> <xsl:if test="$paramQueryMark = 'true'">
> <xsl:text>&</xsl:text>
> </xsl:if>
> target=<xsl:value-of select="$varTarget" />
> <xsl:call-template name="queryMark">
> <xsl:with-param name="paramQueryMark"
> select="'true'" />
> </xsl:call-template>d
> </xsl:if>
> <xsl:if test="string($varPageNumber) and $varPageNumber != '1'">
> <xsl:if test="$paramQueryMark = 'true'">
> <xsl:text>&</xsl:text>
> </xsl:if>
> page=<xsl:value-of select="$varPageNumber" />
> <xsl:call-template name="queryMark">
> <xsl:with-param name="paramQueryMark"
> select="'true'" />
> </xsl:call-template>
> </xsl:if>
> <xsl:if test="string($varSortSelected)">
> <xsl:if test="$paramQueryMark = 'true'">
> <xsl:text>&</xsl:text>
> </xsl:if>
> sort=<xsl:value-of select="$varSortSelected" />
> <xsl:call-template name="queryMark">
> <xsl:with-param name="paramQueryMark"
> select="'true'" />
> </xsl:call-template>
> </xsl:if>
> </xsl:template>
>
> <xsl:template name="queryMark">
> <xsl:param name="paramQueryMark" />
> </xsl:template>
> </xsl:stylesheet>
>
> Thanks for your help!
> Trish
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Problem Dynamically Building , Trish | Thread | RE: [xsl] Problem Dynamically Build, Trish |
| Re: [xsl] XSLamenT, Justin Johansson | Date | Re: [xsl] XSLamenT, Steve |
| Month |