This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
How to invoke java instance methods from xslt?
- From: Brad Cox <bcox at virtualschool dot edu>
- To: xsl-list at lists dot mulberrytech dot com
- Cc: Brad Cox <bcox at virtualschool dot edu>
- Date: Fri, 1 Feb 2002 14:51:58 -0500
- Subject: [xsl] How to invoke java instance methods from xslt?
- Reply-to: xsl-list at lists dot mulberrytech dot com
Could someone please provide the recipe for passing a java
instance into xslt and then calling a method on that instance?
I'm using xalan extensions but keep getting lost in the weedy
syntax.
With this input
<task ident="...">
<page ident="...">Arbitrary xhtml</page>
<page ident="...">Arbitrary xhtml</page>
<page ident="...">Arbitrary xhtml</page>
<page ident="...">Arbitrary xhtml</page>
<page ident="...">Arbitrary xhtml</page>
<page ident="...">Arbitrary xhtml</page>
</task>
and this for launching xslt from java
StringWriter sw = new StringWriter();
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new
StreamSource(xslPath));
transformer.setParameter("cache", this);
transformer.transform(new StreamSource(xmlPath), new
StreamResult(sw));
and this xslt. Cache is the java instance and addBody is one of
its public methods.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="http://xml.apache.org/xslt/java"
version="1.0">
<xsl:param name="cache"></xsl:param>
<xsl:template match="/task">
<xsl:apply-templates select="page"/>
</xsl:template>
<xsl:template match="page">
<xsl:variable name="ident" select="string(@ident)"/>
<xsl:variable name="body" select="text()"/>
<xsl:param name="cache" select="java:$cache.addPage($ident,
$body)"/>
<xsl:value-of select="java:format($formatter, $date)"/>
</xsl:template>
</xsl:stylesheet>
The match("page") clause is gibberish because where I'm getting lost.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list