xsl-list
[Top] [All Lists]

Passing a variable number of parameters?

2004-09-27 05:41:52
My question is twofold, one part is pure XSL, the other focuses on the
implementation side of things.

I need a way to pass a variable number of key-value pairs to the
stylesheet.  The keys are taken from a known, finite list, and can be
zero or more.  This appears impossible to achieve with xsl:params
because they must be known at compile time.  So, I thought the best
way would be to pass a NodeList or an XML fragment to one known
xsl:param.  Could somebody confirm this as correct, or is there a
better way to achieve this goal?

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.

I sincerely hope somebody on this list has a solution to this problem.


Some background:  I am developping an application which consists of a
client written entirely in {ECMA,J,Java}script.  The client access
electronic publications, and can also search their contents. To
display the hit count per publication, I transform the XML document
with the metadata information about the publications, with the hit
counts passed in as parameter (if possible).  The result will look a
bit like this:

+-------------------------------+
| - [328] Publication Title 1
| - Publication Title 2
| - [2] Publication Title 3
| - Publication Title 4
| [...]                          
+-------------------------------+

I imagine the nodelist to be stored in the parameter to look like this
<hits>
<hit for="id.of.publication1" number="328"/>
<hit for="id.of.publication3" number="2"/>
</hits>

And, finally, the template to use the nodeist parameter:
<xsl:template name="tpl.insert.hit.count">
<!-- current publication id supplied by caller -->
<xsl:param name="publication.id"/>

<!-- create a variable containing either a node, or is empty -->
<xsl:variable name="hit.node"
select="$hit.fragment/hits/hit[(_at_)id=$publication(_dot_)id]"/>

<!-- if non-empty, output hit count stuff -->
<xsl:if test="$hit.node">
<span class='clsHitCount'><xsl:value-of select="$hit.node/@number"/></span>
</xsl:if>
</xsl:template>


Thank you very much in advance,
-- 
Jakob Fix.
[I have Gmail invitations.  Please contact me *offlist* if interested.]


<Prev in Thread] Current Thread [Next in Thread>