XSLT Parameter parsing
Maxim Dounin
mdounin at mdounin.ru
Wed Sep 22 07:24:28 MSD 2010
Hello!
[sorry for late reply, I have this flagged in my inbox but had no
time to look at this closely]
On Fri, Jul 30, 2010 at 03:42:12PM +0100, Laurence Rowe wrote:
> XSLT parameter parsing currently allows paramters to be passed one per
> line or multiple per line separated by a colon (:).
> http://wiki.nginx.org/NginxHttpXsltModule#xslt_stylesheet
>
> location / {
> xslt_stylesheet /site/xslt/one.xslt
> $arg_xslt_params
> param1='$value1': param2=value2
> param3=value3;
> }
>
> This has the unfortunate effect of preventing xpath parameters being
> passed as url parameters when they contain a colon (fairly common in
> xpath as a namespace or axis specififer). Consider the following
> configuration:
>
> location / {
> xslt_stylesheet filter.xsl
> xpath=$arg_xpath;
> }
>
> I would like to be able to call call the url
> /doc.xml?xpath=ancestor-or-self::entry, but the current parameter
> parsing code interprets this as multiple invalid parameters
> ``xpath=ancestor-or-self``, ````, ``entry``. As far as I can tell
> there is no way to substitute ":" for "%3A" in a variable.
>
> The attached patch removes support for specifying multiple parameters
> in a single line. You may still supply multiple parameters to an xslt
> by supplying one per line. (I've split the patch into two changesets
> for readability.)
I believe multiple parameters in single argument was initially introduced
to make it possible to pass multiple params as single block. E.g.
via query string argument:
xslt_stylesheet /site/xslt/one.xslt
$arg_xslt_params;
(part of example from
http://sysoev.ru/nginx/docs/http/ngx_http_xslt_module.html#xslt_stylesheet)
I don't think that ripping this functionality just to make writing
xpath arguments easier is a good idea. Correct escaping for ':'
should do the trick.
> As an alternative it may be possible to preserve the current behaviour
> by splitting parameters before the call to ngx_http_complex_value
> which performs the variable substitution, however I was unable to work
> out how to do this myself.
This aproach will prevent the above from working, too.
Maxim Dounin
More information about the nginx-devel
mailing list