You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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>&#10;</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>&#10;</xsl:text> <!-- 换行 -->
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

关键注意事项

  • 字段列表用变量定义,后续要调整字段直接改变量值,不用在代码里多处修改,维护更方便。
  • 用normalize-space()判断空值,能把纯空格的情况也识别为空,避免出现误判。
  • 必须根据你实际的XML结构调整数据节点路径:示例里的//record是假设数据都在record节点下,要是你的XML数据节点是/data/entry,就换成对应的路径。
  • 如果字段内容包含逗号、双引号这类CSV特殊字符,要额外加转义逻辑(比如用双引号包裹字段,内部的双引号替换成两个),示例默认假设字段无特殊字符,有需要可以自行扩展。

内容的提问来源于stack exchange,提问作者Curo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:24:52