Re: [xsl] construct query string

Subject: Re: [xsl] construct query string
From: Greg Faron <gfaron@xxxxxxxxxxxxxxxxxx>
Date: Tue, 07 May 2002 14:15:37 -0600
At 01:36 PM 5/7/2002, you wrote:
I'm attempting to construct a query string ("?param1=blah&param2=blah2",
for example) using the values of a series of tags in an XML document. My
first intuition was to create an XSL variable, and then send the
transformer into a loop which concats each param tag onto that variable.
However, after reading the W3C doc, it doesn't seem like that's feasible
because you can't "shadow" a XSLT variable in the same template context,
and you can't reference the variable you're trying to declare in the
variable definition.  TIA.

It rather depends on you XML and whether or not you're aware of the structure. Let's say, for example, that you assume that the element in question is known to not have grandchildren, and that the text within the children do not have whitespace. In other diagrams, it looks like this:
<foo>
<a>text</a>
<b/>
<c></c>
<d>more_text</d>
</foo>


  You can create "?a=text&b=&c=&d=more_text" using the stylesheet
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:template match="/">
    <xsl:text>query-string = "</xsl:text>
    <xsl:apply-templates select="foo/*" mode="query"/>
    <xsl:text>"</xsl:text>
  </xsl:template>

  <xsl:template match="*" mode="query">
    <xsl:if test="position() = 1">
      <xsl:text>?</xsl:text>
    </xsl:if>
    <xsl:value-of select="local-name(.)"/>
    <xsl:text>=</xsl:text>
    <xsl:value-of select="string(.)"/>
    <xsl:if test="last() != position()">
      <xsl:text disable-output-escaping="yes"><![CDATA[&]]></xsl:text>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>


If the text has whitespace, you'll need to convert it to an equivalent HTML-encoded character (i.e. a space becomes %20). the same goes for other special characters like ampersands, punctuation, etc.



Greg Faron Integre Technical Publishing Co.



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


Current Thread