2011-06-08 31 views
2

我正在寻找将标题标记添加到具有来自属性的格式化日期的元素。输入值是DateTime UTC格式,我需要以“漂亮格式”输出。使用XSLT属性中的格式化日期

我有一个模板来转换值。但是我不知道如何在将值放入属性时调用此模板。

<xsl:template name="formatDate"> 
    <xsl:param name="dateTime" /> 
    <xsl:variable name="date" select="substring-before($dateTime, 'T')" /> 
    <xsl:variable name="year" select="substring-before($date, '-')" /> 
    <xsl:variable name="month" select="substring-before(substring-after($date, '-'), '-')" /> 
    <xsl:variable name="day" select="substring-after(substring-after($date, '-'), '-')" /> 
    <xsl:value-of select="concat($month, '-', $day, '-', $year)" /> 
    </xsl:template> 
+0

美国的日期格式很漂亮吗?好吧,我想美丽是在旁观者的眼中。 – 2011-06-08 22:21:32

+0

这个词相当相对。我会想象到本地用户(AKA Lusers)美国日期格式比UTC – 2011-06-09 00:18:16

回答

1
<xsl:attribute name="title"> 
    <xsl:call-template name="formatDate"> 
    <xsl:with-param name="dateTime" select="@lastReported" /> 
    </xsl:call-template> 
</xsl:attribute> 
+1

+1更加漂亮:) – 2011-06-08 20:50:20

1

如果您打算重新使用相同的值,你也可以这样做:

<xsl:variable name="title"> 
    <xsl:call-template name="formatDate"> 
    <xsl:with-param name="dateTime" select="@lastReported" /> 
    </xsl:call-template> 
</xsl:variable> 

<dummy titile="{$title}"/> 
+1

+1我更喜欢从变量内部调用模板,即使我不需要重复使用相同的模板价值,只是因为我认为它使代码更清晰。在我看来,使用变量/ AVT比使用xsl:变量读取元素/属性要容易得多。 – 2011-06-08 20:44:23

+0

确实如此。 – 2011-06-08 20:48:04

1

如果使用XSLT 2.0,你可以跳过调用模板一起和使用format-dateTime()

<foo title="{format-dateTime(@lastReported,'[M]-[D]-[Y]')}"/> 
+0

+1它看起来很干净。这个函数适用于XSLT 2.0规范。我错过了看XPath 2.0。 – 2011-06-08 20:49:54