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

如何在XSLT 3.0中拆分单行值为多行并去除重复项

在XSLT 3.0中拆分XML元素内空格分隔值并去重

输入示例

<AAA>RIO_CBI_TE01_1 RIO_CBI_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 </AAA>

期望输出

<AAA>RIO_CBI_TE01_1</AAA>
<AAA>RIO_ATC_TE01_1</AAA>

解决方案

使用XSLT 3.0的tokenize()函数拆分元素文本中的空格分隔值,结合distinct-values()去除重复项,最后遍历去重后的集合生成新的<AAA>元素:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <!-- 匹配输入的AAA元素 -->
    <xsl:template match="AAA">
        <!-- 拆分文本为空格分隔的序列,过滤空字符串(处理末尾空格) -->
        <xsl:variable name="unique-values" select="distinct-values(tokenize(normalize-space(.), '\s+'))"/>
        
        <!-- 遍历去重后的每个值,生成新的AAA元素 -->
        <xsl:for-each select="$unique-values">
            <AAA><xsl:value-of select="."/></AAA>
        </xsl:for-each>
    </xsl:template>

    <!-- 匹配根节点,处理所有子元素 -->
    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

关键步骤说明

  • normalize-space(.):去除文本首尾空格,同时将连续空格替换为单个空格,避免拆分出空字符串
  • tokenize(..., '\s+'):以一个或多个空格为分隔符,将文本拆分为字符串序列
  • distinct-values(...):对序列去重,保留唯一值
  • <xsl:for-each>:遍历去重后的每个值,生成独立的<AAA>元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:22:12