Hi I have made a Translate class, in which a replace method is found. This method replace words, with other in a string. I have a problem trying to get to this method by using xslt extension functions with xalan j_2_2_D14. Instead of using the replace method in my Translate class, it uses the replace method in the java.lang.String class. Can you help me ??
---------- The xslt script : ----------- xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:lxslt="http://xml.apache.org/xslt" xmlns:bdf="dk.bording.axt.tc.xsl.Translate" extension-element-prefixes="bdf" version="1.0"> <lxslt:component prefix="bdf" functions="replace"> <lxslt:script lang="javaclass" src="xalan://dk.bording.axt.tc.xsl.Translate"/> </lxslt:component> <xsl:output indent="yes" method="xml" encoding="iso-8859-1" cdata-section-elements="VALUE NAME KEY SOURCE pling"/> <xsl:template match="/"> <xsl:apply-templates select="text()"/> <document> <pling> <xsl:for-each select="function/test"> <xsl:value-of select="bdf:replace(string(text()),'asd','abc')"/> </xsl:for-each> </pling> </document> </xsl:template> </xsl:stylesheet> ------- Java file -------- package dk.bording.axt.tc.xsl; import org.w3c.dom.*; import org.apache.xalan.extensions.*; import org.w3c.dom.traversal.*; import org.apache.xalan.templates.*; public class Translate { static StringBuffer sb; static int i; static String s1; public static String replace(XSLProcessorContext processorContext, ElemExtensionCall extElem) { return "hest"; } public static String replace(NodeList nl, String s2, String s3) { for (int i = nl.getLength() - 1; i >= 0; i--) { s1 = (String)nl.item(i).getNodeValue(); s1 = (String)rep(s1, "%pl%", "'"); s2 = (String)rep(s2, "%pl%", "'"); s3 = (String)rep(s3, "%pl%", "'"); } return rep(s1,s2,s3); } public static String replace(ExpressionContext ec, String s2, String s3) { NodeIterator ni = ec.getContextNodes(); boolean more = true; while (more) { Node n = ni.nextNode(); if (n != null) { more = true; } else { more = false; } s1 = (String)n.getNodeValue(); s1 = (String)rep(s1, "%pl%", "'"); s2 = (String)rep(s2, "%pl%", "'"); s3 = (String)rep(s3, "%pl%", "'"); } return rep(s1,s2,s3); } public static String replace2(String s1, String s2, String s3) { s1 = (String)rep(s1, "%pl%", "'"); s2 = (String)rep(s2, "%pl%", "'"); s3 = (String)rep(s3, "%pl%", "'"); return rep(s1,s2,s3); } private static String rep(String s1, String s2, String s3) { int l = s1.length(); for (int i2=0;i2<l;i2++) { char rp = s2.charAt(0); char fc = s1.charAt(i2); if (rp == fc) { String s = s1.substring(i2, i2 + s2.length()); if (s.equals(s2)) { StringBuffer sb = new StringBuffer(s1); sb.delete(i2, i2 + s2.length()); l = l - s2.length(); sb.insert(i2, s3); l = l + s3.length(); s1 = sb.toString(); for (int i3=0;i3<s3.length();i3++) { i2++; } } } } return s1; } }
