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

使用XSLT将XML转换为CSV时的格式异常问题求助

解决方案

你可以通过判断护照节点的位置来分别输出首行和后续行的内容,调整后的XSLT代码如下:

<xsl:for-each select="Data/Employee">
    <!-- 提前提取员工固定字段,避免重复读取节点 -->
    <xsl:variable name="firstName" select="Name/FirstName"/>
    <xsl:variable name="lastName" select="Name/LastName"/>
    <xsl:variable name="dob" select="DOB"/>
    
    <xsl:for-each select="Passport">
        <xsl:choose>
            <!-- 首条护照记录,输出完整字段+出生日期 -->
            <xsl:when test="position() = 1">
                <xsl:value-of select="$firstName"/>
                <xsl:text>,</xsl:text>
                <xsl:value-of select="$lastName"/>
                <xsl:text>,</xsl:text>
                <xsl:value-of select="Country"/>
                <xsl:text>,</xsl:text>
                <xsl:value-of select="ID"/>
                <xsl:text>,</xsl:text>
                <xsl:value-of select="$dob"/>
            </xsl:when>
            <!-- 后续护照记录,前两列留空 -->
            <xsl:otherwise>
                <xsl:text>,,</xsl:text>
                <xsl:value-of select="Country"/>
                <xsl:text>,</xsl:text>
                <xsl:value-of select="ID"/>
            </xsl:otherwise>
        </xsl:choose>
        <!-- 统一添加换行符 -->
        <xsl:text>&#xd;</xsl:text>
    </xsl:for-each>
</xsl:for-each>

逻辑说明

  • 把循环主体放在护照节点的遍历中,保证每一行对应一条护照记录
  • 首条护照(position()=1)完整输出姓名、护照信息,末尾拼接出生日期
  • 后续护照仅输出护照信息,前两个位置用两个逗号占位,对应姓名两列的空值
  • 统一在每次循环末尾添加换行符,避免格式错乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:36:04