如何在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
相关产品推荐
相关产品推荐

