格式化非静态日期字符串XSLT XML

时间:2016-12-06 15:16:55

标签: xml string xslt

我的XML有一个看起来像这个

的日期字符串
<row id="1">
  <DocDueDate>12/06/2016 12:00:00 AM</DocDueDate>
</row>

我正在尝试使用XSLT格式化它

<shipdate>
    <!--YYYY-DD-MM-->
    <xsl:variable name="var_shipdate" select="row/DocDueDate" />
    <xsl:value-of select="concat(substring($var_shipdate, 7, 4), '-', substring($var_shipdate, 1, 2), '-', substring($var_shipdate, 4, 2) ) " />
</shipdate>

这会产生这样的输出

<shipdate>
20161206           
</shipdate>

如果我的日期格式从MM/DD/YYYY更改为MM/D/YYYYM/D/YYYYM/DD/YYYY

,则xslt中的我的字符串连接失败并产生错误的输出

那么我如何操纵字符串连接以产生类似YYYYMMDD的输出 不论我的源xml格式.. 我需要用零填充它,但我如何在'/'

上分割我的源字符串

1 个答案:

答案 0 :(得分:1)

以这种方式尝试:

<shipdate>
    <!--YYYY-DD-MM-->
    <xsl:variable name="date" select="substring-before(row/DocDueDate, ' ')" />
    <xsl:variable name="year" select="substring-after(substring-after($date, '/'), '/')" />
    <xsl:variable name="month" select="substring-before($date, '/')" />
    <xsl:variable name="day" select="substring-before(substring-after($date, '/'), '/')" />

    <xsl:value-of select="$year" />
    <xsl:value-of select="format-number($month, '-00')" />
    <xsl:value-of select="format-number($day, '-00')" />
</shipdate>