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

在XSLT 1.0中拆分变量并应用于for-each循环

在XSLT 1.0中拆分逗号分隔变量并循环处理

当然可以在XSLT 1.0里实现你的需求!你之前尝试用substring-before直接放到for-each里出错,核心原因是**for-each需要遍历节点集,而substring-before返回的是字符串值,不是节点**,所以会触发运行时错误。

在XSLT 1.0中,没有原生的tokenize函数(那是XSLT 2.0才引入的),最优的实现方式是使用递归模板——这是处理字符串拆分的标准、兼容性最好的方案,不需要依赖任何扩展函数。

实现步骤与完整代码

下面是修改后的完整XSLT代码,我会逐部分解释:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <!-- 定义你的逗号分隔变量 -->
    <xsl:variable name="SortOrder">Birthday, Housenumber, Zipcode, Carbrand, LicensePlate, Polis, Damageyears, Kmperyear</xsl:variable>
    <xsl:variable name="delimeter">, </xsl:variable>

    <!-- 调用递归模板处理拆分后的每个元素 -->
    <xsl:call-template name="process-token">
      <xsl:with-param name="input" select="$SortOrder"/>
      <xsl:with-param name="delimiter" select="$delimeter"/>
    </xsl:call-template>
  </xsl:template>

  <!-- 递归模板:拆分字符串并处理每个token -->
  <xsl:template name="process-token">
    <xsl:param name="input"/>
    <xsl:param name="delimiter"/>

    <!-- 仅当输入字符串不为空时继续处理 -->
    <xsl:if test="$input != ''">
      <!-- 提取第一个token:concat是为了兼容最后一个没有分隔符的元素 -->
      <xsl:variable name="current-token" select="substring-before(concat($input, $delimiter), $delimiter)"/>

      <!-- 这里写你要对每个token执行的操作 -->
      <p>Processing token: <strong><xsl:value-of select="$current-token"/></strong></p>

      <!-- 处理剩余的字符串,递归调用模板 -->
      <xsl:call-template name="process-token">
        <xsl:with-param name="input" select="substring-after($input, $delimiter)"/>
        <xsl:with-param name="delimiter" select="$delimiter"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

关键逻辑说明

  • 递归模板process-token:这是核心,它会反复调用自己,每次处理字符串的一个token,直到字符串为空。
  • concat($input, $delimiter)的作用:确保最后一个没有尾随分隔符的元素也能被正确提取,避免substring-before返回空值。
  • 灵活性:你可以把<p>Processing token: ...</p>替换成任何你需要的操作(比如生成XML元素、调用其他模板等)。

为什么不推荐扩展函数?

有些XSLT处理器支持EXSLT的str:tokenize函数,但它不是XSLT 1.0的标准特性,不同处理器的兼容性不一致。而递归模板是所有XSLT 1.0处理器都支持的通用方案,没有兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:07:37