2011-01-07 72 views
2

我正在使用xalan處理器在Oxygen中調試xslt樣式表。我似乎無法得到當前時間()或時間小時()函數的工作。我收到「找不到功能」錯誤。我究竟做錯了什麼?這裏是代碼。在xslt中無法識別xpath函數

<xsl:variable name="isPm" select="hours-from-time(n1:TIME_REPORT) &gt;= 12"/>

+0

好問題,+1。查看我的答案,瞭解`current-time()`函數的解釋和解決方案。 – 2011-01-08 04:29:27

回答

4

hours-from-timecurrent-time是XPath 2.0函數。 Xalan僅支持XPath 1.0。的支持的Xalan擴展函數

後來的版本,這將給一些這方面的功能。你正在尋找的功能都以某種形式存在。請注意,由於XPath 1.0不理解日期時間,因此您將處理字符串。不過看到,例如:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date"> 
    <xsl:template match="/"> 
     <html> 
      <head> 
       <title>Current Date Test</title> 
      </head> 
      <body> 
       <h1>It's now <xsl:value-of select="date:date-time()"/>.</h1> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

Xalan Extension Function頁,也是EXSLT Extension Function page for Dates and Times兩者。

+0

有什麼辦法可以在xpath 1.0中獲得當前時間嗎? – whyvez 2011-01-07 20:29:34

1

那些不是標準的XPath 1.0功能。如果您的處理器具有作爲擴展實現的這些功能,那麼您應該爲它們添加正確的名稱空間。

http://www.w3.org/TR/xslt#section-Extension-Functions

如果在一個FunctionCall 表達FunctionName不是NCName來(即,如果 它包含一個冒號),那麼它是 ,以一個擴展 函數的調用處理。 FunctionName將 擴展爲使用來自評估 上下文的名稱空間 聲明的名稱。

如果XSLT處理器不具有 實現特定名稱 的延伸 功能可用,則function-available 功能必須爲 名返回false。如果這樣一個擴展函數 在表達發生並且 擴展功能實際上是所謂的, XSLT處理器必須發信號通知 錯誤。 XSLT處理器不能 僅僅發出錯誤信號,因爲 表達包含一個擴展 功能對於沒有執行 可用。

如果XSLT處理器有一個 實現特定名稱 的延伸 功能可用,那麼function-available 功能必須爲 名返回true。如果這樣的擴展被調用,然後 XSLT處理器必須調用 實現傳遞函數 調用參數;通過 執行返回的結果返回爲函數調用的 結果。

2
I am debugging an xslt stylesheet in Oxygen using the xalan processor. 

我似乎無法得到 當前時間()或小時的時間() 職能工作。我得到一個「不能 查找功能」的錯誤。

正如@lavinio和@Alejandro所指出的,這兩個函數是在Xalan 2.0中不支持的XPath 2.0中引入的。

您可以將當前時間作爲參數傳遞給XSLT 1.0轉換

請注意,即使在XPath 2.0中,轉換期間對current-time()的多次評估返回相同的值。所以這個函數不會給你任何東西超過你通過傳遞當前時間作爲參數。