2012-03-29 59 views
2

我正在嘗試使用來自java的Saxon處理器。我使用的saxon9ee.jar內saxonee9-3-0-11j.zip(剛剛下載的,沒有執照 - 是必須的,從而它會工作?)從XSL調用Java(SAXON)

他們* *資源可以在這裏找到: http://www.saxonica.com/documentation/extensibility/functions/instance-methods.xml

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

我的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> 

我的Java文件:

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())); 
    } 

} 

我輸入XML文件:

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

我主要的Java文件:

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)); 

} 

錯誤: XTDE1425:無法找到匹配的0參數的函數命名 {java:com.macfaq.math.SimpleSaxon} getCurrentFullDate()。名稱空間URI和本地名稱 已識別,但內置模板規則中的參數數量有誤。

有沒有人有幸用XSL調用自定義Java函數,同時使用這個美妙的處理器?

回答

2

當您使用Saxon-EE JAR文件運行Saxon但沒有許可證時,(至少在理論上)它應該與Saxon-HE完全一樣,這意味着不支持此類擴展函數調用。

如果您從命令行運行,-TJ選項將爲您提供更詳細的診斷信息,詳細說明搜索匹配功能。

+0

使用Saxon-HE時,例外說明HE版本不支持擴展功能(或多或少)。在不更改任何代碼的情況下,只是撒克遜庫,我會得到上述錯誤。 我從Eclipse運行它,我嘗試設置-TJ參數,但輸出似乎相同。 – Buffalo 2012-03-30 06:52:19