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

如何用XSLT 2.0按拆分的日期列重复输出同一行数据

XSLT 2.0 拆分员工日期记录解决方案

首先假设你的原始XML结构如下(如果实际结构不同,只需调整XPath路径即可):

<employees>
  <employee>
    <EmpNo>123</EmpNo>
    <name>abc</name>
    <enrollingDates>10/01/2022-10/02/2022-10/05/2022</enrollingDates>
  </employee>
</employees>

对应的XSLT 2.0转换代码如下:

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

  <!-- 输出表头 -->
  <xsl:template match="/">
    <xsl:text>EmpNo Name enrollingDates&#10;</xsl:text>
    <xsl:apply-templates select="employees/employee"/>
  </xsl:template>

  <!-- 处理每个员工节点 -->
  <xsl:template match="employee">
    <!-- 使用tokenize拆分日期字符串,分隔符为'-' -->
    <xsl:variable name="dates" select="tokenize(enrollingDates, '-')"/>
    <xsl:variable name="empNo" select="EmpNo"/>
    <!-- 把姓名转成大写 -->
    <xsl:variable name="upperName" select="upper-case(name)"/>

    <!-- 遍历每个拆分后的日期,输出一行记录 -->
    <xsl:for-each select="$dates">
      <xsl:value-of select="$empNo"/>
      <xsl:text> </xsl:text>
      <xsl:value-of select="$upperName"/>
      <xsl:text> </xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

关键说明

  • tokenize(enrollingDates, '-'):XSLT2.0新增的字符串拆分函数,把用-分隔的日期串拆分成节点序列,每个日期是一个独立节点。
  • upper-case(name):将姓名转换为大写,匹配你期望的输出格式。
  • xsl:output method="text":指定输出为纯文本格式,而非XML,符合你要的单行记录样式。
  • &#10;:代表换行符,确保每个日期对应一行独立记录。

转换后的输出结果:

EmpNo Name enrollingDates
123 ABC 10/01/2022
123 ABC 10/02/2022
123 ABC 10/05/2022

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:35:21