在 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>