RE: [xsl] Passing a Map as parameter to XSLT.

Subject: RE: [xsl] Passing a Map as parameter to XSLT.
From: "DEVAL SHAH" <devals9@xxxxxxxxxxx>
Date: Sat, 04 Mar 2006 00:04:38 +0000
Hello,
Thank you for the reply.

I am still not able to access the parameter that I pass to XSLT.

Let me explain what I want to do.

I want to pass in key,value pairs to XSLT. I hava a Map object in Java which contains this key value pair. I read in some forum that there is no direct way to pass this object as a Map so I need to convert it into xml format. So I am converting it into a xml format and setting it as the parameter. I am using javax.xml.transform.Transformer. I set the parameter as:
transformer.setParameter("XSLTParameter",xmlDoc);
where xmlDoc is some org.w3c.dom.Document object.


Now in xsl I try to get this parameter using <xsl:param name="XSLTParameter" />.
I want to loop through the xml document that I have passed in XSLTParameter using some key.
So I define
<xsl:key name="xsltParameterMap" match="/*/map/entry" use="@key"/>


I Tried to loop in following manner.

<xsl:for-each select="key('xsltParameterMap','line')">
.........
</xsl:for-each>

XSLT is not going inside this loop. I am sure I am setting 'line' as one of the key value in the XML that I am passing as parameter to the XSLT. So it should go inside the loop.

Any help on this ?

Thanks
Deval

From: "Michael Kay" <mike@xxxxxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Subject: RE: [xsl] Passing a Map as parameter to XSLT.
Date: Fri, 3 Mar 2006 22:57:18 -0000

>
> I want to pass a java.util.Map object to a XSLT as a parameter.

Why do you want to pass a java.util.Map, and if that's what you want to do,
why are you passing an org.w3c.dom.Document?

> Currently the way I am doing is:
> 1. Creating an org.w3c.dom.Document object in the format
>     <x:map>
>     <entry key="..." value="..."/>
>           ...
>     </x:map>
>
> 2. I have defined a parameter in xslt
> <xsl:param name="XSLTParameter" />
>
>
> Now how do I access this map in the XSLT.

Your application has to tell the XSLT processor to use the document(1) as
the value of the parameter(2). The way you do this depends on your
processor. Look for a method called setParameter() or addParameter().

Then you access the parameter as $XSLTParameter.

 I am not able to access it.
> I was trying to use the key function as follows:
>
> <xsl:key name="xsltParameterMap" match="document('')/*/map/entry"
> use="@key"/>
>

A key might be useful to find an entry within your map, but it isn't going
to help you access the map. Once you've loaded the document you can define a
key as


<xsl:key name="xsltParameterMap" match="/*/map/entry" use="@key"/>

(though match="entry" will work equally well)

and then access a value with

key('xsltParameterMap', $requiredValue)

having made sure that $XSLTParameter is the context node.

Michael Kay
http://www.saxonica.com/

Current Thread