2012-03-14 35 views
2

美好的一天!我下載了Altova XMLSpy試用版,安裝了FOP 0.95並試圖執行XSLT(版本1.0)轉換。我的模板是有效的,但在轉化過程中它包含「日期 - 時間()」函數的行失敗:XHTML date-time()函數在ALTOVA中是未知的XmlSpy

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dt="http://exslt.org/dates-and-times" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="dt exsl"> 
<xsl:output method="html" encoding="utf-8" indent="yes"/> 

<xsl:template match="/"> 
    <html> 
     <body> 
      <xsl:value-of select="dt:date-time()"/> 
     </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

的錯誤信息是:

Error in XPath expression 
Unknown function - Name and number of arguments do not match any function signature in 
the static context - 'http://exslt.org/dates-and-times:date-time' 

請如何提供這方面的功能?我確定這個功能存在。該模板適用於以下在線XSLT測試儀:http://markbucayan.appspot.com/xslt/index.html

提前致謝! Vojtech

更新:我安裝了SAXON 9(HE和EE),配置了ALTOVA來使用它,但同樣的錯誤。

+0

當你說「同樣的錯誤」你的意思是完全一樣的措辭?因爲這是一個Altova錯誤消息,所以如果您收到此消息,則說明您沒有運行Saxon。使用system-property('xsl:vendor')來告訴你你正在運行哪個XSLT處理器。 – 2012-03-14 14:39:12

+0

謝謝Michael。當我查詢供應商和版本,我得到這個:供應商Saxonica,版本2.0。與「相同的錯誤」我的意思是相同的錯誤信息,因爲它寫在我的問題。 – Vojtech 2012-03-14 15:43:43

回答

4

如果您正在使用的Altova或撒克遜可以使用XSLT2而不是XSLT1所以不需要加載EXSLT擴展,xpath2有這個功能內置在

select="current-dateTime()" 

http://www.w3.org/TR/xpath-functions/#func-current-dateTime

+0

謝謝,不幸的是,我使用Altova只是爲了開發一個模板,它將用於僅支持XSLT1的Web應用程序。所以我不能使用XSLT2。 – Vojtech 2012-03-14 13:17:43

+0

那麼在這種情況下,您需要查看您的Web應用程序是否支持exslt擴展(它不是xslt的標準部分),或者可能更簡單,只需將當前日期聲明爲樣式表參數並將其傳遞到樣式表中即可一個以外部主機語言計算的字符串。 – 2012-03-14 13:32:07

+0

謝謝大衛。是的,Web應用程序支持EXSLT。我不是應用程序的所有者,我只需要爲它開發一個模板。由於Web應用程序提供的usig工具很困難,因此我想在本地機器上開發它。不幸的是,EXSLT似乎無法在我的機器上工作,我不知道爲什麼。當我打印有關供應商和版本的信息時,我可以得到:供應商Saxonica 2.0版。 – Vojtech 2012-03-14 15:41:51

0
`<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" extension-element-prefixes="msxsl" xmlns:local="urn:local> 
<msxsl:script language="CSharp" implements-prefix="local"> 


public string dateTimeNow() 
    {  
     return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
    } 

</msxsl:script> </xsl:stylesheet>` 

和然後像這樣使用<xsl:param name="dnes" select="local:dateTimeNow()"/>

0

請使用支持XSL 2.0的Altova xml spy 9版本。

感謝 阿迪亞

+1

請閱讀已接受的答案,並在發佈之前發表評論...您將意識到發佈該問題的人不能使用XSL 2.0 – NREZ 2013-07-30 09:25:17

+0

問題包含版本信息而非限制,這就是爲什麼我建議。 – Aditya 2017-03-10 06:52:38