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

如何修复XSLT 3.0中xsl:iterate与xsl:break的报错问题?

解决XSLT 3.0中xsl:break must be the last instruction in the xsl:iterate loop报错

问题原因

报错的核心原因是:xsl:break执行后,循环体内不能存在任何会被后续执行的指令。你的代码里,xsl:break位于xsl:choose的otherwise分支,但xsl:choose之后还跟着xsl:next-iteration——触发xsl:break时,后续的xsl:next-iteration仍会被解析,违反了xsl:break必须作为循环最后执行指令的语法规则。

修正方案

调整代码结构,将xsl:next-iteration移到需要继续迭代的分支中(即前两个xsl:when分支的末尾),确保触发xsl:break时没有后续指令需要执行。

修正后的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"    
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"     
       xmlns:xs="http://www.w3.org/2001/XMLSchema"  
       xmlns:fn="http://www.w3.org/2005/xpath-functions">
   <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
   <xsl:template match="/primes">
      <xsl:iterate select="i">
         <xsl:param name="cnt" select="1"/>
         <xsl:choose>
            <xsl:when test="position()=1">
              &#10; Prime: 2
              <xsl:next-iteration>
                <xsl:with-param name="cnt" select="$cnt+1" as="xs:integer"/>
              </xsl:next-iteration>
            </xsl:when>
            <xsl:when test="position() le 5">
              &#10; Prime <xsl:value-of select="."/> Leap: 
              <xsl:value-of select=". - /*//i[$cnt - 1]"/>
              <xsl:next-iteration>
                <xsl:with-param name="cnt" select="$cnt+1" as="xs:integer"/>
              </xsl:next-iteration>
            </xsl:when>
            <xsl:otherwise>
               <xsl:break/>
            </xsl:otherwise>
         </xsl:choose>
         <xsl:on-completion>
             Primes are fun.
         </xsl:on-completion>
      </xsl:iterate>
   </xsl:template>
</xsl:stylesheet>

说明

  • 将xsl:next-iteration分别放入前两个xsl:when分支内,仅当需要继续迭代时才执行该指令。
  • 进入otherwise分支触发xsl:break时,循环体内无后续指令,符合XSLT 3.0的语法要求。
  • xsl:on-completion不受影响,会在循环正常结束或被xsl:break终止时执行。

内容的提问来源于stack exchange,提问作者Chong Lip Phang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:35:23