说我有一个以“ 2018-03-00”形式填写的日期。我希望它是“ 00-MAR-18”。在XSLT 2.0中,有什么功能可用于此功能。
我正在寻找month(3)= MAR。我将自己撰写其他字段。
答案 0 :(得分:0)
当日期为“ 00”时,您的日期不能作为xs:date强制转换。如果您确实有“ 00”,则将无法使用format-date()
。
如果您的日期可以转换为xs:date的日期,那么下面是一个示例...
XML输入
<test>2018-03-01</test>
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:value-of select="format-date(., '[D01]-[MN,*-3]-[Y01]')"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出
<test>01-MAR-18</test>
提琴:http://xsltfiddle.liberty-development.net/3NzcBtj
编辑
由于您的日期不是真正的日期,因此您可以创建自己的函数...
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:so="stackoverflow.test">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:function name="so:format_month">
<xsl:param name="date_string"/>
<xsl:variable name="months" select="(
'JAN','FEB','MAR',
'APR','MAY','JUN',
'JUL','AUG','SEP',
'OCT','NOV','DEC')"/>
<xsl:variable name="date_tokens" select="tokenize($date_string,'-')"/>
<xsl:value-of select="($date_tokens[3],
$months[number($date_tokens[2])],
substring($date_tokens[1],3,2))" separator="-"/>
</xsl:function>
<xsl:template match="/*">
<xsl:copy>
<xsl:value-of select="so:format_month(.)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>