XSL如何实现isnull逻辑:变量为空时隐藏对应标签并使用备用变量
XSLT实现空值判断切换输出标签的解决方案
你可以通过XSLT内置的条件判断语句实现该需求,核心是判断目标字段是否为有效值,按需输出对应的标签块。
方案1:二选一输出(仅显示身份证/护照其中一组)
符合你描述的「身份证号为空时完全隐藏对应标签,仅输出护照标签」的需求,使用<xsl:choose>实现分支判断:
<ExternalIdentifier> <!-- Id number --> <xsl:choose> <!-- normalize-space用于过滤全空格等空白无效值 --> <xsl:when test="normalize-space(idy_nbr) != ''"> <TypeCode>IdentityDocumentId</TypeCode> <Id> <xsl:value-of select="idy_nbr"/> </Id> </xsl:when> <!-- 身份证号为空时走该分支输出护照信息 --> <xsl:otherwise> <TypeCode>Passport Number</TypeCode> <Id> <xsl:value-of select="ppo_nbr"/> </Id> </xsl:otherwise> </xsl:choose> </ExternalIdentifier>
方案2:多值共存输出(身份证有值时同时显示两类信息)
如果需要身份证号存在时两类信息都展示,仅在身份证号为空时隐藏对应标签,使用<xsl:if>单独判断即可:
<ExternalIdentifier> <!-- Id number --> <xsl:if test="normalize-space(idy_nbr) != ''"> <TypeCode>IdentityDocumentId</TypeCode> <Id> <xsl:value-of select="idy_nbr"/> </Id> </xsl:if> <TypeCode>Passport Number</TypeCode> <Id> <xsl:value-of select="ppo_nbr"/> </Id> </ExternalIdentifier>
补充说明
normalize-space()函数会自动去除字段值前后的空格、换行等空白字符,避免仅含空白的无效值被误判为有值- 如果你使用XSLT 2.0及以上版本,也可以用
empty(idy_nbr[normalize-space(.)!=''])来判断字段是否为空,语义更清晰
内容的提问来源于stack exchange,提问作者JakkalsM
相关产品推荐
相关产品推荐

