在 xslt 中的特定条件匹配后中断 for 循环
break a for-loop after specific condition match in xslt
https://xsltfiddle.liberty-development.net/eieFA1J/16
我在这里尝试匹配占位符[@md.mnem='angen'][placeholder.text='UL'] 并确定它在 并将其存储到变量中。并在匹配后收集所有 hg* 记录,直到我找到相同或更小的 hg* 记录(在我的示例中它是 hg2,如果我找到 hg2 或 hg1,我必须打破循环)
我能够 select 特定匹配后的 hg* 记录,但在匹配相同的 hg* 或更小的 hg* 后无法中断。
谁能帮我解决这个问题,xml 和 xsl 可以在下面 link 中找到。
https://xsltfiddle.liberty-development.net/eieFA1J/16
XSLT 3 xsl:iterate
而不是 xsl:for-each
可能有助于实现传统的循环和中断算法:
<xsl:iterate select="$hgset">
<xsl:choose>
<xsl:when test="@md.mnem gt $hgValue">
<xsl:copy-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:break/>
</xsl:otherwise>
</xsl:choose>
</xsl:iterate>
当然,您也可以使用递归函数或模板在 XSLT 2 中实现同样的功能,或者可能只是 select 序列中第一个“破坏”条件的项目和 select使用 <<
运算符“之前”的任何内容。
另一种选择是使用 <xsl:for-each-group select="$hgset" group-ending-with="*[@md.mnem le $hgValue]"><xsl:if test="position() = 1"><xsl:copy-of select="current-group()"/></xsl:if></xsl:for-each-group>
。
https://xsltfiddle.liberty-development.net/eieFA1J/16
我在这里尝试匹配占位符[@md.mnem='angen'][placeholder.text='UL'] 并确定它在
我能够 select 特定匹配后的 hg* 记录,但在匹配相同的 hg* 或更小的 hg* 后无法中断。
谁能帮我解决这个问题,xml 和 xsl 可以在下面 link 中找到。 https://xsltfiddle.liberty-development.net/eieFA1J/16
XSLT 3 xsl:iterate
而不是 xsl:for-each
可能有助于实现传统的循环和中断算法:
<xsl:iterate select="$hgset">
<xsl:choose>
<xsl:when test="@md.mnem gt $hgValue">
<xsl:copy-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:break/>
</xsl:otherwise>
</xsl:choose>
</xsl:iterate>
当然,您也可以使用递归函数或模板在 XSLT 2 中实现同样的功能,或者可能只是 select 序列中第一个“破坏”条件的项目和 select使用 <<
运算符“之前”的任何内容。
另一种选择是使用 <xsl:for-each-group select="$hgset" group-ending-with="*[@md.mnem le $hgValue]"><xsl:if test="position() = 1"><xsl:copy-of select="current-group()"/></xsl:if></xsl:for-each-group>
。