XSL脚本条件判断异常:节点不存在仍输出标签求助
XSL节点非空判断失效问题排查与解决
问题原因
你的判断条件not(Payee/RemitAdviceEmail='')存在逻辑漏洞。在XPath规则中:
- 当
Payee/RemitAdviceEmail节点不存在时,Payee/RemitAdviceEmail=''的比较结果为false(空节点集与空字符串不相等) - 因此
not(false)返回true,触发<xsl:if>执行,最终输出了包含空<RmtLctnElctrncAdr>的<RltdRmtInf>结构。
解决方案
要实现“节点存在且文本非空才输出”的逻辑,需修正判断条件,以下两种方式均可:
方式1:显式判断节点存在+内容非空
直接同时校验节点存在和文本不为空:
<xsl:if test="Payee/RemitAdviceEmail and not(Payee/RemitAdviceEmail='')">
方式2:使用normalize-space()简化判断
normalize-space()函数会自动处理三种情况:节点不存在、文本为空、文本仅含空格,只要其中一种情况成立,函数返回false,否则返回true:
<xsl:if test="normalize-space(Payee/RemitAdviceEmail)">
修改后的完整代码示例
<xsl:if test="normalize-space(Payee/RemitAdviceEmail)"> <RltdRmtInf> <RmtLctnMtd> <xsl:text>EMAL</xsl:text> </RmtLctnMtd> <RmtLctnElctrncAdr> <xsl:value-of select="Payee/RemitAdviceEmail"/> </RmtLctnElctrncAdr> </RltdRmtInf> </xsl:if>
内容的提问来源于stack exchange,提问作者Joji
相关产品推荐
相关产品推荐

