2012-10-30 72 views
5

我XSL看起來象下面這樣:XSLT調用Java實例方法

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
xmlns:SimpleDateFormat="java.text.SimpleDateFormat" 
xmlns:Date="java.util.Date" exclude-result-prefixes="SimpleDateFormat Date"> 

<xsl:variable name="s" select="SimpleDateFormat:new(MMM/dd/yyyy-HH/mm/ss/SSS)"/> 
<xsl:variable name="date" select="Date:new(number($beginTime))"/> 

所以現在如何調用實例的'方法的格式(日期日期)?

如果我使用<xsl:value-of select="s:format($date)" />,那麼錯誤是:前綴必須解析爲名稱空間:s。

但是,如果我添加這樣的名稱空間:xmlns:s="java.text.SimpleDateFormat"<xsl:value-of select="s:format($date)" />將返回默認格式,而不是指定的格式。

那麼我怎樣才能得到指定的格式,如MM/dd/yyyy -HH/mm/ss/SSS?

回答

4

你需要使用的命名空間是指對象類型之一,並傳遞變量本身作爲你的電話的第一個參數:

BTW:你需要把引號之間的格式參數:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:SimpleDateFormat="java.text.SimpleDateFormat" xmlns:Date="java.util.Date" exclude-result-prefixes="SimpleDateFormat Date"> 
    <xsl:variable name="s" select="SimpleDateFormat:new('MMM/dd/yyyy-HH/mm/ss/SSS')"/> 
    <xsl:variable name="date" select="Date:new()"/> 
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> 
    <xsl:template match="*"> 
     <Test> 
      <xsl:value-of select="SimpleDateFormat:format($s,$date)" /> 
     </Test> 
    </xsl:template> 
</xsl:stylesheet> 

我希望這有助於!

+0

對不起,我不太明白'你需要把格式參數放在撇號之間'。在哪裏放置格式參數?但是,非常感謝您的建議,根據您的提示,我做到了。唯一的問題是'SimpldDateFormat.format(Date date)'應該只根據java doc取1個參數,但爲什麼'SimpldDateFormat:format($ s,$ date)'是正確的? – frank

+0

關於格式:我的意思是你需要在撇號之間指定格式字符串「MMM/dd ...」,所以'SimpleDateFormat:new('MMM/dd ..')'而不是'SimpleDateFormat.new(MMM/ddd ...)'這會嘗試將它解釋爲xpath而不是文字。 –

+0

關於參數:是的,這是正確的。當你訪問實例方法時(非靜態的),你需要在開始時增加一個參數來指定你想要使用的那個類的實例(由命名空間前綴指定)。但是,當你訪問靜態方法或構造函數時(例如'SimpleDateFormat.new'調用),你不需要它。 –