我正在尝试使用XSLT3.0 在https://xsltfiddle.liberty-development.net/这里进行实验。
我发现了一个错误:
xsl:break must be the last instruction in the xsl:iterate loop
以下是我的XML:
<?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:
<?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">
Prime: 2
</xsl:when>
<xsl:when test="position() le 5">
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>
发布于 2022-09-25 00:48:53
由于https://www.w3.org/TR/xslt-30/#iterate中规定的规则,你需要。
<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">
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">
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
在这里。
https://stackoverflow.com/questions/73842928
复制相似问题