首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在XSLT3.0中解决这个问题?(xsl:iterate和xsl:break)

如何在XSLT3.0中解决这个问题?(xsl:iterate和xsl:break)
EN

Stack Overflow用户
提问于 2022-09-25 08:07:25
回答 1查看 28关注 0票数 0

我正在尝试使用XSLT3.0 在https://xsltfiddle.liberty-development.net/这里进行实验。

我发现了一个错误:

代码语言:javascript
运行
复制
xsl:break must be the last instruction in the xsl:iterate loop

以下是我的XML:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<primes>
   <i>2</i>
   <i>3</i>
   <i>5</i>
   <i>7</i>
   <i>11</i>
   <i>13</i>
</primes>

以下是我的XSLT:

代码语言:javascript
运行
复制
<?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:when>
            <xsl:when test="position() le 5">
              &#10; Prime <xsl:value-of select="."/> Leap: 
              <xsl:value-of select=". - /*//i[$cnt - 1]"/>
            </xsl:when>
            <xsl:otherwise>
               <xsl:break/>
            </xsl:otherwise>
         </xsl:choose>
         <xsl:on-completion>
             Primes are fun.
         </xsl:on-completion>
         <xsl:next-iteration>
            <xsl:with-param name="cnt" select="$cnt+1" as="xs:integer"/>
         </xsl:next-iteration>
      </xsl:iterate>
   </xsl:template>
</xsl:stylesheet>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-25 08:48:53

由于https://www.w3.org/TR/xslt-30/#iterate中规定的规则,你需要。

代码语言:javascript
运行
复制
   <xsl:template match="/primes">
      <xsl:iterate select="i">
         <xsl:param name="cnt" select="1"/>
         <xsl:on-completion>
             Primes are fun.
         </xsl:on-completion>
         <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:iterate>

不确定你是否需要xsl:iterate在这里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73842928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档