2014-10-02 222 views
-1

替換XML值我有以下XML文檔:XSLT:以當前日期和時間

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Header/> 
<soapenv:Body> 
    <Elaborations> 
     <Elaboration> 
      <DateBegin>2014-01-01T02:00:00.000+01:00</DateBegin> 
      <DateEnd>2014-01-01T02:00:00.000+01:00</DateEnd> 
      <Result>12594</Result> 
     </Elaboration> 
     <Elaboration> 
      <DateBegin>2014-01-01T02:00:00.000+01:00</DateBegin> 
      <DateEnd>2014-01-01T02:00:00.000+01:00</DateEnd> 
      <Result>12593</Result> 
     </Elaboration> 
     <Elaboration> 
      <DateBegin>2014-01-01T02:00:00.000+01:00</DateBegin> 
      <DateEnd>2014-01-01T02:00:00.000+01:00</DateEnd> 
      <Result>12595</Result> 
     </Elaboration> 
     <Elaboration> 
      <DateBegin>2014-01-01T02:00:00.000+01:00</DateBegin> 
      <DateEnd>2014-01-01T02:00:00.000+01:00</DateEnd> 
      <Result>29598</Result> 
     </Elaboration> 
     <Elaboration> 
      <DateBegin>2014-01-01T02:00:00.000+01:00</DateBegin> 
      <DateEnd>2014-01-01T02:00:00.000+01:00</DateEnd> 
      <Result>37583</Result> 
     </Elaboration> 
    </Elaborations> 
</soapenv:Body> 
</soapenv:Envelope> 

我要替換的元素DateBegin和DateEnd與當前日期和時間的值,用XSLT。 我寫了下面的轉換:

<?xml version="1.0"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:variable name="dateNow" select="current-dateTime()"/> 
    <xsl:template match="DateBegin/text()"> 
     <xsl:value-of select="$dateNow"/> 
    </xsl:template> 
    <xsl:template match="DateEnd/text()"> 
     <xsl:value-of select="$dateNow"/> 
    </xsl:template> 
</xsl:stylesheet> 

但我的XSLT文件得到一個解析錯誤。 問題在哪裏?

+2

請發佈您正在獲取的**確切**錯誤。 – 2014-10-02 16:00:30

+0

你的代碼似乎沒有問題,它運行良好[這裏](http://xsltransform.net/gWmuiJ1)。正如Michael建議的那樣,告訴我們錯誤信息是什麼。另外,您使用哪種XSLT處理器? – 2014-10-02 21:52:50

+0

我在駱駝路線中使用轉換。我得到以下錯誤:'javax.xml.transform.TransformerConfigurationException:無法編譯樣式表''在檢查表達式類型'funcall(current-dateTime,[])'時引起錯誤:' – Andrea 2014-10-03 07:23:17

回答

3

我解決了包括camel-saxon在classpath中的問題。這最終啓用了xslt 2.0函數(如current-dateTime)。

+1

事實上,默認情況下任何外部XSLT處理器庫),'javax.xml.transform'僅支持XSLT 1.0。 – 2014-10-03 09:42:20

+0

或者,您可以使用Xalan支持的EXSLT date:date()擴展函數。 – 2014-10-03 09:49:28