2013-07-05 102 views
0

我有以下XML格式日期

<Report> 
    <Items> 
     <Item> 
     <Id>1</Id> 
     <TotalSent>251</TotalSent> 
     <Opened>48</Opened> 
     <LastSend>01/07/2013 16:38:18</LastSend> 
     <Bounced>1</Bounced> 
     <Unopened>202</Unopened> 
     </Item> 
    </Items> 
    </Report> 

我想將它轉換爲使用XSLT另一個XML,我需要的O/P是像下面

<chart subcaption ="Last sent on Monday 01 July 2013 at 16:38"> 
    <set label="Opened" value="48"/> 
    <set label="Bounced" value="1"/> 
</chart> 

我沒能得到日期爲我想要的subcaption屬性。 我想下面的XSLT代碼,但它不工作

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt"> 
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/> 
<xsl:template match="/"> 
    <chart> 
     <xsl:variable name='lastSend' select='Report/Items/Item/LastSend' /> 
     <xsl:attribute name="subcaption"> 
     <xsl:value-of select="ms:format-date($lastSend, ' Last sent on MMM dd, yyyy at')"/> 
     <xsl:value-of select="ms:format-time($lastSend, ' hh:mm')"/> 
     </xsl:attribute> 
     <xsl:for-each select="Report/Items/Item"> 
     <set> 
      <xsl:attribute name="label">Opened</xsl:attribute> 
      <xsl:attribute name="value"> 
      <xsl:value-of select="Opened" /> 
      </xsl:attribute> 
     </set> 
     <set> 
      <xsl:attribute name="label">Bounced</xsl:attribute> 
      <xsl:attribute name="value"> 
      <xsl:value-of select="Bounced" /> 
      </xsl:attribute> 
     </set> 
     </xsl:for-each> 
    </chart> 
    </xsl:template> 
</xsl:stylesheet> 

當我在毫秒通過硬編碼值:格式日期()& MS:格式時間()功能,如01/07/2013 16:38:18這是工作罰款,但是當我傳遞變量值$ lastSend它不起作用。

注意:我可以使用任何版本的xsl。

回答

3

如果你想使用XSLT 2.0,那麼你需要你的自定義日期分別DateTime格式轉換爲xs:dateTime,然後你可以使用XSLT 2.0提供的格式,日期時間函數(見http://www.w3.org/TR/xslt20/#format-date):

<xsl:template match="LastSend"> 
    <!-- 01/07/2013 16:38:18 --> 
    <xsl:variable name="dt" as="xs:dateTime" select="xs:dateTime(concat(substring(., 7, 4), '-', substring(., 4, 2), '-', substring(., 1, 2), 'T', substring(., 12)))"/> 
    <xsl:attribute name="subcaption" select="format-dateTime($dt, 'Last sent on [F] [D01] [MNn] [Y0001] at [H01]:[m01]')"/> 
</xsl:template> 

以上述第二個參數「圖片字符串」爲例,說明如何格式化dateTime,您可能需要根據您的需要對其進行調整,具體取決於XSLT 2.0規範中記錄的圖片字符串參數。