我正在制作一个XSL样式表来格式化Shopify输出的XML日期。
什么是输出是;
<created-at type="dateTime">2014-12-23T14:27:53-05:00</created-at>
我需要调整它看起来像
<created-at type="dateTime">2014-12-23 14:27:53</created-at>
我只是不确定如何删除"T"或剪辑末尾的时区戳。
有什么建议吗?
当前 XSL 样式表(订单日期是我正在尝试调整的内容);
<xsl:template match="order">
<html>
<head>
<title>St. Baldrick's Order #<xsl:value-of select="order-number" /></title>
</head>
<body>
<p>
Order Number: <xsl:value-of select="order-number" /><br /><!-- Their Order Number -->
Client ID: <xsl:value-of select="id" /><br /><!-- Internal Compass ID or Customer Account Number -->
First Name: <xsl:value-of select="first-name" /><br /><!-- Ship-to first name -->
Last Name: <xsl:value-of select="last-name" /><br /><!-- Ship-to last name -->
Order Date: <xsl:value-of select="created-at" /><br /><!-- Order Date -->
</p>
</body>
</html>
</xsl:template>
一种方法是,就像匹配完整节点的示例一样
<xsl:template match="created-at">
<xsl:copy>
<xsl:attribute name="type" select="@type"/>
<xsl:value-of select="substring(translate(.,'T', ' '),1,string-length()-6)"/>
</xsl:copy>
</xsl:template>
结果:<created-at type="dateTime">2014-12-23 14:27:53</created-at>
这会将 T 替换为使用 translate()
的空格,并使用 substring()
剪切最后 6 个字符。
更新:如注释中所述,如果日期始终采用 hh:mm:ss(格式),则可以删除substring()
中的string-length()
,并将选择表达式简化为<xsl:value-of select="substring(translate(.,'T', ' '),1,19)"/>
对于刚刚添加的原始模板匹配order
:如果您只是更改它,它应该可以工作:
Order Date: <xsl:value-of select="created-at" />
进入这个:
Order Date: <xsl:value-of select="substring(translate(created-at,'T', ' '),1,19)" />