XSLT 1.0 如何将MeetingDate属性拼接为零填充YYYY-MM-DD日期变量供查询使用
XSLT 1.0 拼接YYYY-MM-DD格式日期变量实现
XSLT 1.0 无内置日期格式化函数,核心处理逻辑是对月份、日期字段做2位长度零填充,最终拼接为标准日期字符串。
实现方式
当前上下文可直接读取MeetingDate的Year/Month/Day属性,直接替换原有硬编码的strDate变量即可,后续查询、判断逻辑无需调整。
写法1:直观判断补零
通过判断字段长度,不足2位时前置补0,逻辑清晰易维护:
<xsl:variable name="strDate"> <xsl:value-of select="MeetingDate/@Year"/> <xsl:text>-</xsl:text> <!-- 月份零填充 --> <xsl:if test="string-length(MeetingDate/@Month) < 2"> <xsl:text>0</xsl:text> </xsl:if> <xsl:value-of select="MeetingDate/@Month"/> <xsl:text>-</xsl:text> <!-- 日期零填充 --> <xsl:if test="string-length(MeetingDate/@Day) < 2"> <xsl:text>0</xsl:text> </xsl:if> <xsl:value-of select="MeetingDate/@Day"/> </xsl:variable>
写法2:单表达式精简实现
借助字符串截取技巧,用单行select完成拼接和补零,代码更简洁:
<xsl:variable name="strDate" select="concat( MeetingDate/@Year, '-', substring(concat('0', MeetingDate/@Month), string-length(concat('0', MeetingDate/@Month)) - 1), '-', substring(concat('0', MeetingDate/@Day), string-length(concat('0', MeetingDate/@Day)) - 1) )"/>
原理说明:无论原始月份/日期是1位还是2位,前置拼接一个
0后取字符串的最后2位,即可稳定得到2位长度的零填充结果:比如原始值为4时,拼接后得到04,截取结果为04;原始值为29时,拼接后得到029,截取结果为29,完全符合格式要求。
效果验证
针对示例属性值Year=2021、Month=4、Day=29,两种写法最终生成的$strDate值均为2021-04-29,和硬编码测试值格式完全匹配,可直接在原有查询逻辑中使用。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

