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

如何用XSL将XML转换为垂直展示数据的CSV文件?

如何用XSL将XML转换为你期望的CSV格式

当然可以实现你想要的输出!你当前的XSL代码是把每个员工的所有经理都放在同一行,而我们需要为每个经理单独生成一行,和对应的员工配对。下面是具体的解决方案:

正确的XSL转换代码

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

  <xsl:template match="Root">
    <!-- 遍历每一条员工记录 -->
    <xsl:for-each select="Row">
      <!-- 把当前员工的名字存为变量,方便后续重复调用 -->
      <xsl:variable name="currentEmployee" select="Employee"/>
      <!-- 遍历当前行下所有经理节点(匹配以Employees_Manager_开头的节点) -->
      <xsl:for-each select="*[starts-with(local-name(), 'Employees_Manager_')]">
        <!-- 输出员工名 -->
        <xsl:value-of select="$currentEmployee"/>
        <text>,</text>
        <!-- 输出当前经理的名字 -->
        <xsl:value-of select="."/>
        <text>,</text>
        <!-- 输出换行符,分隔每一行 -->
        <xsl:text>&#xD;&#xA;</xsl:text>
      </xsl:for-each>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

为什么这个方案能工作?

  • 变量复用:用<xsl:variable>保存当前员工的名字,避免在每个经理循环里重复查询Employee节点,让代码更高效易懂。
  • 动态匹配经理节点:通过starts-with(local-name(), 'Employees_Manager_')匹配所有经理节点,就算以后新增Employees_Manager_4这类节点,代码也能自动适配,不用手动修改。
  • 逐经理生成行:内层的<xsl:for-each>会为每个经理单独生成一行数据,完美实现你需要的“员工-单个经理”的行结构。

转换后的输出结果

运行上述XSL后,你会得到完全符合期望的CSV:

Harry,Ron,
Harry,Hermione,
Harry,Ginni,
Ross,Emma,
Ross,Monica,
Ross,Rachel,

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:11:49