xsl-list
[Top] [All Lists]

Re: Passing a variable number of parameters?

2004-09-27 08:46:19
David, Andrew,

thanks so far for your input.  On the one hand I am relieved that
there's no obvious solution which I missed, on the other hand I an
worried about the same thing, i.e. there's no straightforward way to
do what I need to do.

Does that mean what I want to do is weird and unusual (not that I
would mind ;-)?

On Mon, 27 Sep 2004 16:26:17 +0100, Andrew Welch
<ajwelch(_at_)piper-group(_dot_)com> wrote:

This leads me to the second part of my question, because
somebody could say "Why don't you try it out?".  I need to
implement this in Javascript, and so far I haven't found a
way to create a NodeList that would be accepted by the XSL
processor (be it Gecko or MSIE) as valid parameter; I receive
"incompatibe type" errors.

If you are struggling to create a node list to pass in as a parameter,
two other solutions are:

1.  Create an xml file out of your node-list and then reference that
using the document() function.  For example:

params.xml

<params>
  <param name="bar" value="baz"/>
  <param name="hello" value="world"/>
</params/>

Then use:

<xsl:variable name="params" select="document('params.xml')"/>

Well, in a multi-user environment this won't work, unless I create a
unique file for each request which is out of the question, and
impossible as the client in this application cannot create files on
the server.

2.  Create your params as a well-formed string and then combine with the
xml document (in also in string form) and then transform that.  For
example:

var params = "<params> ..blah </params>";
var xmlDoc =  "<root>" + params + original_xml_doc + "</root>";

(note the containing root element to keep everything well-formed)

This is interesting, I would have to modify the in-memory
representation of the source XML file.  I haven't thought of this,
probably because of was too focussed on the nodelist-as-a-parameter
problem.  Looking at your idea, it's certainly not a clean solution
because I have to modify the source file which is Not a Good Thing,
but it would at least be a temporary hack.

You can then access your parameters using:

<xsl:variable name="params" select="/root/params"/>

cheers
andrew 

By the way, how is this problem dealt with in other languages?  Is
this a Javascript idiosyncracy?  I suppose Java has a NodeList type
which processors will gladly accept?

thanks.
-- 
cheers,
Jakob.