如何在XSLT中正确编写小于等于条件实现组织代码转换?
解决XSLT中日期小于等于条件的问题
你的问题可以通过两个关键调整解决,以下是具体方案:
1. 正确转义小于等于运算符
在XML/XSLT的属性值中,小于等于符号<=必须转义为<=,直接写<=会被XML解析器误判为标签语法,导致逻辑不生效或报错。
2. 确保日期比较的准确性
虽然YYYY-MM-DD格式的字符串可直接按字典序完成日期比较(结果与日期逻辑一致),但显式转换为日期类型能避免格式不规范带来的错误,逻辑更严谨。不同XSLT版本的写法略有区别:
修正后的代码(XSLT 2.0及以上)
<xsl:choose> <xsl:when test="Organization_code='MT_01' and xs:date(start_date) <= xs:date('2024-03-01')"> <xsl:text>MT_06</xsl:text> </xsl:when> <xsl:otherwise> <xsl:value-of select="Organization_code"/> <!-- 若使用变量$Organization_code,请确保变量已通过<xsl:variable>正确定义 --> </xsl:otherwise> </xsl:choose>
XSLT 1.0兼容写法
如果环境仅支持XSLT 1.0(无xs:date函数),可依赖字符串比较(前提是start_date格式严格为YYYY-MM-DD):
<xsl:choose> <xsl:when test="Organization_code='MT_01' and start_date <= '2024-03-01'"> <xsl:text>MT_06</xsl:text> </xsl:when> <xsl:otherwise> <xsl:value-of select="Organization_code"/> </xsl:otherwise> </xsl:choose>
额外检查项
- 确认
Organization_code和start_date是当前上下文节点的子节点,若使用变量需保证变量定义正确。 - 检查
start_date的取值无多余空格或格式错误(如2024-3-1这类不规范格式会导致比较失败)。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

