2011-10-11 43 views
1

我有這個xslt文件,我需要調用一個java函數放在同一個應用程序中的其他地方。 XSLT文件中我有如何在xslt文件中調用外部java函數?

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:java="java" 
       xmlns:test_my="vobs.plugins.WikiParser.WikiParser" 
       version="2.0"> 
    <xsl:output indent="yes" method="html"/> 
    <xsl:template match="/"> 
    <H1> 
     <xsl:value-of select="WikiDescription/Title"/> 
    </H1> 
    Summary: <xsl:value-of select="WikiDescription/Description"/> 
    <xsl:variable name="text">      
     <xsl:value-of select="WikiDescription/Text"/> 
    </xsl:variable> 
    <p> 
     <xsl:value-of select="test_my:parse2($text)" 
        disable-output-escaping="yes"/> 
    </p> 

,但是當我嘗試EXCUTE這個XLST文件我有以下錯誤

XSL transform reported error: 
XPath syntax error at char 21 on line -1 in {test_my:parse2($text)}: 
Cannot find a matching 1-argument function named 
{vobs.plugins.WikiParser.WikiParser}parse2() 

好像它無法找到Java類,有啥正確的方法來做到這一點?一些代碼示例會更好。提前致謝!

+0

再次看看我的XSL。看起來,對我來說工作是在類的完全限定名稱之前使用「urn:java:」(而不是我之前使用「java:」的文章)。相應地更新我的答案。請讓我知道這對你有沒有用。 –

回答

1

您需要更改命名空間聲明(在XSL:stylesheet元素)從xmlns:test_my="vobs.plugins.WikiParser.WikiParser"xmlns:test_my="urn:java:vobs.plugins.WikiParser.WikiParser"

的理由如下:爲了使用從包AB C類,你需要定義一個命名空間前綴並將其與urn:java:a.b.C聯繫起來。

如果我正確理解XSL,導入不屬於標準庫的Java代碼時需要urn:前綴(如您的情況)。如果你只需要導入標準庫類,那麼「java:」就可以。

(詳情:http://cafeconleche.org/books/xmljava/chapters/ch17s03.html

[編輯:修改的 「java」 - > 「甕:JAVA:」]

+0

感謝您的回覆,我試了一下,但得到了同樣的錯誤。 – user899628

2

我有完全相同的問題,這解決了這個問題,我在那裏urn:java:java:都失敗了。

假設您使用Xalan進行轉換,您應該將xmlns:test_my="vobs.plugins.WikiParser.WikiParser"更改爲xmlns:test_my="xalan://vobs.plugins.WikiParser.WikiParser"

3

這取決於您使用的XSLT轉換處理器。撒克遜使用urn:java:; Xalan使用xalan://

相關問題