2012-03-29 14 views
2

Ich versuche, den Saxon-Prozessor von Java zu verwenden. Ich bin mit der die saxon9ee.jar innerhalb saxonee9-3-0-11j.zip (gerade heruntergeladen, keine Lizenz - ist das notwendig, damit es funktionieren?)Java von XSL (SAXON) aufrufen

Ihre * * Ressourcen hier finden Sie: http://www.saxonica.com/documentation/extensibility/functions/instance-methods.xml

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

Mein xsl:

<?xml version="1.0"?> 
<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 

    <xsl:template match="/"> 
     <xsl:value-of select="dateUtils:getCurrentFullDate()" 
       xmlns:dateUtils="java:com.macfaq.math.SimpleSaxon"/> 
    </xsl:template> 

</xsl:stylesheet> 

Meine Java-Datei:

package com.macfaq.math; 
public class SimpleSaxon { 
public static final String YMDTHMS = "yyyyMMdd'T'hhmmss"; 
    public static String getCurrentFullDate() { 
     return (new SimpleDateFormat(YMDTHMS).format(new Date())); 
    } 

} 

Meine Eingabe-XML-Datei:

<?xml version="1.0" encoding="UTF-8"?> 
<date format="yyyyMMdd'T'hhmmss" year="2000" month="4" day="27"/> 

Meine Haupt Java-Datei:

public class SaxonTransf { 

public static void main(String[] args) { 

    System.setProperty("javax.xml.transform.TransformerFactory", 
      "net.sf.saxon.TransformerFactoryImpl"); 
    String foo_xml = "in.xml"; // input xml 
    String foo_xsl = "transf.xsl"; // input xsl 

    TransformerFactory tfactory = TransformerFactory.newInstance(); 
    Transformer transformer = tfactory.newTransformer(new StreamSource(
      new File(foo_xsl))); 
    transformer.transform(new StreamSource(new File(foo_xml)), 
     new StreamResult(System.out)); 

} 

Fehler: XTDE1425: Es kann keine passende 0-Argument Funktion finden benannt {java: com.macfaq.math.SimpleSaxon} getCurrentFullDate(). Der Namespace-URI und der lokale Name werden erkannt, aber die Anzahl der Argumente ist in der integrierten Vorlagenregel falsch.

Hat jemand Glück gehabt, benutzerdefinierte Java-Funktionen von XSL anzurufen, während dieser wunderbare Prozessor?

Antwort

2

Wenn Sie Saxon mit der JAR-Datei "Saxon-EE" ohne Lizenz ausführen, sollte sich das System (zumindest theoretisch) genau wie Saxon-HE verhalten. Dies bedeutet, dass dieser Aufruf der Erweiterungsfunktion nicht unterstützt wird.

Wenn Sie über die Befehlszeile ausgeführt werden, erhalten Sie mit der Option -TJ detailliertere Diagnosen, die die Suche nach einer passenden Funktion detailliert beschreiben.

+0

Wenn Sie Saxon-HE verwenden, besagt die Ausnahme, dass die HE-Version (mehr oder weniger) keine Erweiterungsfunktionen unterstützt. Ohne irgendeinen Code zu ändern, aber nur die sächsische Bibliothek, erhalte ich den obigen Fehler. Ich bin es von Eclipse ausgeführt und ich habe versucht, die Einstellung -TJ, aber die Ausgabe scheint die gleiche. – Buffalo