如何在XSLT的format-time方法输出中添加毫秒?
解决XSLT format-time输出毫秒的问题
我来帮你搞定这个毫秒输出的问题,之前的写法没生效主要有两个关键点没处理好:
1. 先确认XSLT版本和时间类型转换
format-time是XSLT 2.0及以上版本才支持的函数,而且它要求第一个参数是时间类型(xs:time/xs:dateTime),不是字符串。你的<Qtime>里的内容是字符串格式的时间,直接传进去的话,函数没法识别里面的毫秒部分,所以第一步要把它转换成xs:time类型。
2. 用正确的毫秒格式标记
你之前尝试的[S...]是错误的,XSLT的format-time里,小数秒(也就是毫秒)对应的标记是[f...]:
[f03]:强制显示三位毫秒(比如000、123)[f...]:显示所有非零的小数秒位数(比如如果是14:00:00.5Z,会显示.5而不是.500)
完整的工作示例
下面是修正后的XSLT代码片段,直接用就能输出带毫秒的时间:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xsl:template match="Qtime"> <!-- 先把字符串转成xs:time,再格式化输出时分秒+三位毫秒 --> <xsl:value-of select="format-time(xs:time(.), '[H01]:[m01]:[s01].[f03]')" /> </xsl:template> </xsl:stylesheet>
比如输入<Qtime>14:00:00.123Z</Qtime>,输出就是14:00:00.123;如果输入是<Qtime>14:30:45.5Z</Qtime>,输出会是14:30:45.500(因为用了f03强制三位)。
如果你的XSLT处理器不支持2.0版本(比如老版本的Xalan),那可以用字符串截取的方式兜底:比如用substring-before(substring-after(Qtime, '.'), 'Z')提取毫秒部分,再拼接到格式化后的时间后面。不过优先推荐用XSLT 2.0的标准方法,更可靠。
内容的提问来源于stack exchange,提问作者prime




