verenice: Mit XSLT Java-Methoden in Saxon (8.1.1) aufrufen

Hallo,
weiß zufällig jemand, wie man unten aufgeführten Quellcode, der für Xalan geschrieben wurde, für Saxon schreibt?

Hier wird eigentlich nur eine Java-Methode zum Loggen aufgerufen und dabei Paramter übergeben.
Mit Saxon kann man es natürlich nicht eins zu eins übernehmen.

Ist es überhaupt mit Saxon möglich Java-Methoden aufzurufen?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:log="xalan://pfad.XsltLogger"
  exclude-result-prefixes="log"
  extension-element-prefixes="log"
  version="1.0">
[...]
<log:info message="Connector, test only: {$partnumber}"/>

Java-Klasse:

/*
 * Created on 19.04.2005
 *
 */
package pfad;

import javax.xml.transform.TransformerException;

import org.apache.avalon.framework.logger.Logger;
import org.apache.xalan.extensions.XSLProcessorContext;
import org.apache.xalan.templates.ElemExtensionCall;

public class XsltLogger
{
    private static Logger LOG;

public static void setLogger(Logger aLogger)
    {
        LOG = aLogger;
    }

public void info(XSLProcessorContext context, ElemExtensionCall elem) throws TransformerException
    {
        LOG.info(elem.getAttribute("message", context.getContextNode(), context.getTransformer()));
    }
}

Vielen Dank schon mal im voraus.

Viele Grüße
verenice

  1. Hallo,

    weiß zufällig jemand, wie man unten aufgeführten Quellcode, der für Xalan geschrieben wurde, für Saxon schreibt?

    Das nicht (denn dazu müsste man wohl die gesamte Saxon-API kennen), aber ...

    Hier wird eigentlich nur eine Java-Methode zum Loggen aufgerufen und dabei Paramter übergeben. Mit Saxon kann man es natürlich nicht eins zu eins übernehmen.

    Ist es überhaupt mit Saxon möglich Java-Methoden aufzurufen?

    ... das ist möglich (beachte aber die Version die du benützt):

    http://www.saxonica.com/documentation/extensibility/functions/staticmethods.html

    Die Java-API findest du unter:
    http://www.saxonica.com/documentation/javadoc/index.html

    Der der Package "net.sf.saxon" findest du die Klassen "StandardErrorHandler" und StandardErrorListener. Damit hast du zwei fertige Klassen auf die du direkt von XSLT aus zugreifen kannst.

    Grüße
    Thomas

    1. Hallo Thomas,
      vielen Dank für Deine schnelle Antwort!:o)

      Viele Grüße
      verenice