Hi John,

Please refer to http://xml.apache.org/xalan-j/extensions.html#ext-functions
and scroll down a bit to the section titled "Class format namespace"

Since you want to specify the class as the namespace, you should use "
xmlns:MT="xalan://ManipulateText.ManipulateText" unless your class actually
is in package ManipulateText.  Then what you have shown is correct.

Your Unescape method is not static, so it needs an instance to operate on.
Here is an example in Java and XSLT:
|------------------------------------+------------------------------------|
|Java                                |XSLT                                |
|------------------------------------+------------------------------------|
|ManipulateText mt = new             |<xsl:variable name="mt"             |
|ManipulateText();                   |select="MT:new()"/>                 |
|------------------------------------+------------------------------------|
|char result = mt.Unescape('p');     |<xsl:variable name="result"         |
|                                    |select="MT:Unescape($mt, 'p')"/>    |
|------------------------------------+------------------------------------|



Notice how the instance becomes an extra first argument to the method.

Alternatively, you could just use a static method.

One last thing - in your stylesheet, you're passing in 'text' which is not
a char.  I'm not sure exactly what happens in that case, but I imagine you
meant to use a String in your method.

Kevin Cormier
Software Developer, XSLT Development
IBM Toronto Lab, D1-435
E-mail:  [EMAIL PROTECTED]


                                                                           
             "Wade, John F.                                                
             (MSFC-NAS902099)[                                             
             TBE]"                                                      To 
             <[EMAIL PROTECTED]         Kevin Cormier/Toronto/[EMAIL 
PROTECTED],    
             .gov>                     <xalan-j-users@xml.apache.org>      
                                                                        cc 
             05/11/2007 03:54                                              
             PM                                                    Subject 
                                       RE: Xalan extension functions       
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           




Picking this conversation back up...  I'm trying the abbreviated syntax
as several recommended.  Still getting an error.

ManipulateText.java code is this-

import java.util.*;
public class ManipulateText
{
public char Unescape(char mydata)
  {
    return mydata;
  }
}


Test stylesheet starts with this-

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
             xmlns="http://www.w3.org/1999/xhtml";
             xmlns:doc="http://nwalsh.com/xsl/documentation/1.0";
             xmlns:xalan="http://xml.apache.org/xalan";
             xmlns:MT="xalan://ManipulateText.ManipulateText"
             extension-element-prefixes="MT"
             exclude-result-prefixes="doc"
             version="1.0">

And later contains this-
<xsl:value-of select="MT:Unescape('text')"/>

And I'm now getting this error-
(Location of error unknown)XSLT Error
(javax.xml.transform.TransformerException):
java.lang.NoSuchMethodException: For extension function, could not find
method java.lang.String.Unescape([ExpressionContext,] ).

I tried the the two different flavors of "new" that were suggested, but
didn't get anywhere.

Suggestions?


Reply via email to