【问题标题】:How to convert String to Date YYYY-MM-DD using XSLT 2.0如何使用 XSLT 2.0 将字符串转换为日期 YYYY-MM-DD
【发布时间】:2018-04-24 03:40:46
【问题描述】:

我需要转换 2016 年 11 月 14 日 - 这是字符串数据类型。我需要使用 XSLT 2.0 将其转换为 2016-11-14。请让我知道如何进行?我不想使用 subString 方法。我尝试了 xslt 2.0 中的 format-date() 函数,但没有成功。

【问题讨论】:

标签: xslt-2.0


【解决方案1】:

你可以做这样的事情。如果您不想使用子字符串,可以改用tokenize 函数。

假设输入 XML 如下:

<string>11/14/2016</string>

当针对下面的样式表运行时:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <xsl:variable name="target_string">
            <xsl:value-of select="tokenize(string, '/')[last()]"/>
            <xsl:text>-</xsl:text>
            <xsl:value-of select="tokenize(string, '/')[1]"/>
            <xsl:text>-</xsl:text>
            <xsl:value-of select="tokenize(string, '/')[2]"/>
        </xsl:variable>
        <date1>
            <xsl:value-of select="xs:date($target_string)"/>
        </date1>
        <date2>
            <xsl:value-of select="format-date(xs:date($target_string), '[MNn] [D], [Y]')"/>
        </date2>
    </xsl:template>

</xsl:stylesheet>

产生:

<date1>2016-11-14</date1><date2>November 14, 2016</date2>

【讨论】:

  • 我尝试了上面的示例并在下面收到此错误:无法使用给定的 xslt 转换 xml。原因:无效日期“--”(年份小于四位数)- 我的输入是 - 2016 年 11 月 14 日
  • 我不知道你是怎么实现的,但是代码本身是可以工作的。在这里查看 (xsltfiddle.liberty-development.net/eiZQaEY)
【解决方案2】:

很抱歉,XSLT 遵循 ISO 8601,应该是 yyyy-mm-dd,所以 subString 将是您唯一的选择。

参考: https://www.w3.org/TR/xmlschema-2/#isoformats

【讨论】:

  • 谢谢 Thomas。还有一个问题 - 我在传入的 XML 中有多个日期标签。我将如何使用一个日期模板来实现这一目标?我必须为每个标签创建单独的模板吗?
  • 不确定您的具体要求是什么,但您可以尝试功能,参考:xml.com/pub/a/2003/09/03/trxml.html
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多