xslt - 在 xslt 中的特定条件匹配后中断 for 循环
问题描述
https://xsltfiddle.liberty-development.net/eieFA1J/16
在这里,我试图匹配 placeholder[@md.mnem='angen'][placeholder.text='UL'] 并识别它在前面 <codes.head ID="" md.mnem="hg*"> 并存储它成变量。并在匹配后收集所有 hg* 记录,直到我找到相同或更小的 hg* 记录(在我的示例中它是 hg2,如果我找到 hg2 或 hg1,我必须打破循环)
我可以在特定匹配后选择 hg* 记录,但在匹配相同的 hg* 或更小的记录后无法中断。
谁能帮我解决这个问题,xml和xsl可以在下面的链接中找到。 https://xsltfiddle.liberty-development.net/eieFA1J/16
解决方案
XSLT 3xsl:iterate
代替 anxsl: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 中实现相同的功能,或者只选择序列中“破坏”条件的第一项并使用<<
运算符选择“之前”的任何内容。
另一种选择是使用<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>
.
推荐阅读
- php - 调用 PDO() 时的未知数据库,用于使用 WAMPServer 3.2.0 在 phpMyAdmin 上创建的 MySQL 数据库
- java - 在流函数中解析对象
- go - 无法在 go 例程中获取多个通道值
- google-cloud-platform - GCP Composer - 如何运行 Python 3 而不是 Python 2
- php - SoapCall 从 WSDL PHP 中可用的服务中调用特定服务
- node.js - 获取图片并上传到 Google Cloud Storage
- javascript - 如何配置依赖检查来处理 TSX?
- javascript - app.js:3524 Uncaught ReferenceError: THREE not defined at Object../node_modules/three-bmfont-text/index.js
- google-api - 我想在不使用 Google File Picker 的情况下为特定文件“setAppId”
- javascript - 在 jQuery 插件中添加标记