XSLT如何为有效输出变量加括号且空值不输出空括号
实现方案
你可以通过添加节点存在性判断来避免输出空括号,以下是两种常用实现方式:
1. XSLT 1.0/2.0 通用写法(适用于所有版本)
使用xsl:if先判断目标节点存在且值非空,再输出带括号的内容:
<xsl:if test="sbf[@cd = 'a'] and normalize-space(sbf[@cd = 'a']) != ''"> <xsl:text>(</xsl:text> <xsl:value-of select="sbf[@cd = 'a']"/> <xsl:text>)</xsl:text> <!-- 可选:如果需要多个值之间加空格,可在后面补<xsl:text> </xsl:text> --> </xsl:if>
2. XPath 2.0及以上简化写法
可以直接在属性值模板中嵌入条件表达式,写法更简洁:
{if (exists(sbf[@cd = 'a']) and normalize-space(sbf[@cd = 'a']) != '') then concat('(', sbf[@cd = 'a'], ')') else ''}
如果不需要严格校验空格,仅判断节点是否存在,可以简化为:
{if (sbf[@cd = 'a']) then concat('(', sbf[@cd = 'a'], ')') else ''}
原写法问题说明
你原来的({sbf[@cd = 'a']})写法是固定输出左右括号,仅中间内容动态填充,当目标节点不存在时中间内容为空,自然就会输出空括号。加上判断逻辑后,只有节点有有效值时才会输出整段带括号的内容,即可符合需求。
内容的提问来源于stack exchange,提问作者wowefiq
相关产品推荐
相关产品推荐

