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

使用XSLT 1.0生成Excel兼容CSV保留XML节点内逗号的问题咨询

解决方案

CSV 格式要被 Microsoft 365 Excel 正确识别,包含分隔符(逗号)、换行符、双引号的字段必须满足两个规则:

  • 字段整体用英文双引号包裹
  • 字段内部的英文双引号要转义为两个连续的英文双引号

你之前的代码报错无输出是因为 XPath 拼接语法错误,同时没有正确处理 CSV 转义规则,以下是可直接运行的 XSLT 1.0 代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="UTF-8" omit-xml-declaration="yes"/>

    <!-- 转义模板:把内容中的双引号替换为两个双引号,符合CSV规范 -->
    <xsl:template name="escape-quotes">
        <xsl:param name="content"/>
        <xsl:choose>
            <xsl:when test="contains($content, '&quot;')">
                <xsl:value-of select="substring-before($content, '&quot;')"/>
                <xsl:text>&quot;&quot;</xsl:text>
                <xsl:call-template name="escape-quotes">
                    <xsl:with-param name="content" select="substring-after($content, '&quot;')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$content"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <!-- 匹配根节点输出CSV行 -->
    <xsl:template match="dmodule">
        <!-- 第一个字段:title -->
        <xsl:value-of select="normalize-space(title)"/>
        <xsl:text>,</xsl:text>

        <!-- 第二个字段:含逗号的simplePara,转义后加双引号包裹 -->
        <xsl:text>&quot;</xsl:text>
        <xsl:call-template name="escape-quotes">
            <xsl:with-param name="content" select="normalize-space(applic/displayText/simplePara)"/>
        </xsl:call-template>
        <xsl:text>&quot;</xsl:text>
        <xsl:text>,</xsl:text>

        <!-- 第三个字段:tminfo -->
        <xsl:text>&quot;</xsl:text>
        <xsl:call-template name="escape-quotes">
            <xsl:with-param name="content" select="normalize-space(tminfo)"/>
        </xsl:call-template>
        <xsl:text>&quot;</xsl:text>

        <!-- 换行符 -->
        <xsl:text>&#10;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

效果验证

运行上述代码后生成的CSV内容如下:

ABC DEF,"Block 1, Block 1+, Block 5, Block 5 Exportable","Text that should appear in the next column"

用Excel直接打开该文件,包含逗号的内容会完整保留在同一个单元格内,不会被拆分。

注意事项

  • 不要混用制表符和逗号作为分隔符,统一使用逗号分隔+双引号包裹特殊字段的方案,兼容性最好
  • normalize-space 函数可以自动去除字段前后的换行、多余空格,你如果需要保留原始空格可以去掉该函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:24:03