基于SOURCEID__C是否为空的XSLT字段显示逻辑修改需求
解决XSLT条件输出CSV字段的方案
核心思路
通过判断SOURCEID__C字段是否为空(含纯空格场景),用<xsl:choose>分支逻辑动态切换CSV的表头和数据行输出字段:空值时只输出指定的4个字段,非空时保留原有全字段输出逻辑。
完整XSLT代码示例
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="UTF-8"/> <!-- 定义两种场景的字段列表:按需修改 --> <xsl:variable name="minimal-fields" select="'SOURCEID__C,CANCELLATION_DATE__C,EFFECTIVE_CANCELLATION_DATE__C,CANCELLATION_REASON__C'"/> <!-- 替换成你原来的全字段集合 --> <xsl:variable name="full-fields" select="'FIELD1,FIELD2,SOURCEID__C,CANCELLATION_DATE__C,EFFECTIVE_CANCELLATION_DATE__C,CANCELLATION_REASON__C,FIELD3,FIELD4'"/> <xsl:template match="/"> <!-- 输出CSV表头 --> <xsl:choose> <xsl:when test="normalize-space(//SOURCEID__C) = ''"> <xsl:value-of select="$minimal-fields"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$full-fields"/> </xsl:otherwise> </xsl:choose> <xsl:text> </xsl:text> <!-- 换行 --> <!-- 输出数据行:需匹配你XML的实际数据节点路径 --> <xsl:for-each select="//record"> <xsl:choose> <xsl:when test="normalize-space(SOURCEID__C) = ''"> <!-- 输出极简字段内容 --> <xsl:value-of select="concat( SOURCEID__C, ',', CANCELLATION_DATE__C, ',', EFFECTIVE_CANCELLATION_DATE__C, ',', CANCELLATION_REASON__C )"/> </xsl:when> <xsl:otherwise> <!-- 输出原有全字段内容:替换成你原来的拼接逻辑 --> <xsl:value-of select="concat( FIELD1, ',', FIELD2, ',', SOURCEID__C, ',', CANCELLATION_DATE__C, ',', EFFECTIVE_CANCELLATION_DATE__C, ',', CANCELLATION_REASON__C, ',', FIELD3, ',', FIELD4 )"/> </xsl:otherwise> </xsl:choose> <xsl:text> </xsl:text> <!-- 换行 --> </xsl:for-each> </xsl:template> </xsl:stylesheet>
关键注意事项
- 字段列表用变量定义,后续要调整字段直接改变量值,不用在代码里多处修改,维护更方便。
- 用
normalize-space()判断空值,能把纯空格的情况也识别为空,避免出现误判。 - 必须根据你实际的XML结构调整数据节点路径:示例里的
//record是假设数据都在record节点下,要是你的XML数据节点是/data/entry,就换成对应的路径。 - 如果字段内容包含逗号、双引号这类CSV特殊字符,要额外加转义逻辑(比如用双引号包裹字段,内部的双引号替换成两个),示例默认假设字段无特殊字符,有需要可以自行扩展。
内容的提问来源于stack exchange,提问作者Curo
相关产品推荐
相关产品推荐

