解析XSL日期格式

时间:2014-12-29 19:31:36

标签: xml xslt xml-parsing shopify xml-formatting

我正在制作一个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>

1 个答案:

答案 0 :(得分:1)

这样做的一种方法就是匹配完整节点

<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>

这会使用translate()将空格替换为空格,并使用substring()剪切最后6个字符。

更新如评论中所述,如果日期始终采用hh:mm:ss格式,string-length()中的substring()可以删除, select表达式简化为<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)" />