This works fine with me.

I ran the JavaScript extension specified at,
http://xml.apache.org/xalan-j/extensions.html#ex-basic which works
fine with me.

I downloaded the following additional components,

bsf.jar from http://jakarta.apache.org/bsf/index.html

js.jar from http://www.mozilla.org/rhino/

and placed these in the system CLASSPATH.

please note that, the sample on Xalan site specifies:

<xsl:template match="deadline">

& @numdays

which means, the sample stylesheet is expecting an XML file. something like:

<deadline numdays="5" ...

I modified the sample to something like,

<xsl:template match="/">
   <p><my-ext:timelapse multiplier="2"/>We have logged your enquiry and will
      respond by <xsl:value-of select="my-ext:getdate('5')"/>.</p>
</xsl:template>

and it produces output:

<?xml version="1.0" encoding="UTF-8"?><p>We have logged your enquiry and will
      respond by March 23, 2009 12:51:11 PM IST.</p>


On Thu, Mar 12, 2009 at 11:59 PM, Bohdan <boh...@clarusmt.com> wrote:
>
> Hi,
>
> I used to work quite extensively with XSLTs about 5 years ago, using MSXML2
> and 3 at the time. I remember we used <msxsl:script> quite alot to do bunch
> of processing in JavaScript inside XSLT file.
>
> Now, we are having a project that requires me to do XSLT transfomations in
> servlets on Tomcat. I am using XALAN Java 2 latest version 2.7.1. I thought
> similar functionality exists and indeed found about Xalan extensions. But I
> was frustrated as almost nothing works.
>
> In theollowing examples, I am not getting an error, but javascript functions
> return nothing and no further output after the function call or element call
> is shown.
> Can someone please either help me to resolve the issue or explain why it
> does not work? It would really be nice to have somethign similar to what
> MSXML provides for XSLT.
>
> To give you the better idea, I am using Tomcat 6. I put the following files
> in my web application's "lib" folder:
> bsf.jar, js.ja, js14.jar, serializer.jar, xalan.jar, xercesImpl.jar,
> xml-apis.jar, xsltc.jar
>
> My test code is the following:
>
> <%@ page import="java.io.*" %>
>
> <%
> ServletContext context = pageContext.getServletContext();
> File dir = new File( context.getRealPath( "" ) );
>
> javax.xml.transform.Source xmlSource =
>        new javax.xml.transform.stream.StreamSource(new
> File("C:\\Development\\Projects\\MarketingDataCoordinator\\XsltModule\\src\\TestLayout.xml"));
> javax.xml.transform.Source xsltSource =
>        new javax.xml.transform.stream.StreamSource(new
> File("C:\\Development\\Projects\\MarketingDataCoordinator\\XsltModule\\src\\TestXsl.xsl"));
> javax.xml.transform.Result result =
>                new javax.xml.transform.stream.StreamResult(out);
> javax.xml.transform.TransformerFactory transFact =
>                javax.xml.transform.TransformerFactory.newInstance(  );
> javax.xml.transform.Transformer trans =
> transFact.newTransformer(xsltSource);
> trans.transform(xmlSource,result);
> %>
>
> Finally, my test XSL file is this (actually taken from from xalan download's
> samples)
> <xsl:stylesheet
>    xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>    version="1.0"
>    xmlns:xalan="http://xml.apache.org/xalan";
>    xmlns:my-ext="ext2"
>    extension-element-prefixes="my-ext">
>
>  <!--The component and its script are in the xalan namespace and define the
> implementation-->
>  <xalan:component prefix="my-ext" elements="timelapse" functions="getdate">
>    <xalan:script lang="javascript">
>      var multiplier=1;
>      // Extension element implementations always take two arguments. The
> first
>      // argument is the XSL Processor context; the second argument is the
> element.
>      function timelapse(xslProcessorContext, elem)
>      {
>        multiplier=parseInt(elem.getAttribute("multiplier"));
>        // The element return value is placed in the result tree.
>        // If you do not want a return value, return null.
>        return null;
>      }
>      function getdate(numdays)
>      {
>        var d = new Date();
>        d.setDate(d.getDate() + parseInt(numdays*multiplier));
>        return d.toLocaleString();
>      }
>    </xalan:script>
>  </xalan:component>
>
>  <xsl:template match="deadline">
>    <p>
>        <my-ext:timelapse multiplier="2"/>
>        We have received your enquiry and will respond by
>        <xsl:value-of select="my-ext:getdate(string(@numdays))"/>
>        </p>
>        Some further text after this.
>  </xsl:template>
>
> </xsl:stylesheet>



-- 
Regards,
Mukul Gandhi

Reply via email to