如何在 XSLT 中打破 for-each 以及如何更新 XSLT 中的现有变量
Posted
技术标签:
【中文标题】如何在 XSLT 中打破 for-each 以及如何更新 XSLT 中的现有变量【英文标题】:How to break for-each in XSLT and how to update existing variable in XSLT 【发布时间】:2021-06-22 04:13:38 【问题描述】:为变量 isSetHybridVlanValue 添加值后,我想中断循环。下面是我想要更改的部分代码
<xsl:variable name="isSetHybridVlanValue" select="0"></xsl:variable> **---I have created this flag variable---**
<xsl:variable name="hybridVlanValue">
<xsl:for-each select="$vTokens">
<xsl:if test="$isSetHybridVlanValue = 0"> **---Checking this variable if it is 0 then continue---**
<xsl:choose>
<xsl:when test="contains(current(), 'H')">
<xsl:value-of
select="normalize-space(substring-after(current(), 'H'))" />
<!-- <xsl:variable name="isSethybridVlanValue">
<xsl:value-of select="1" />
</xsl:variable> -->
</xsl:when>
<xsl:otherwise>
<xsl:if
test="contains($isHybridVlanInPortal, 'true') and count($vTokens) = 2 and $voipEnabledVlan != current()">
<xsl:value-of select="current()" />**---Once it is set I want to break this loop hence below I am trying to change existing variable to 1---**
<xsl:variable name="isSetHybridVlanValue" select = "1"/>**---It's showing error here, I want to change value of this existing variable isSetHybridVlanValue---**
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:variable>
在这里我想更新标志变量,但它不起作用。请给我建议以更新现有变量或任何其他解决方案,以便一旦为变量 hybridVlanValue 设置值,我就可以打破每个变量
【问题讨论】:
【参考方案1】:您尝试将 XSLT 当作一种过程语言而不是函数式语言来使用。你需要做一些背景阅读:例如见Loop over a set of elements in xsl with a temporary value。
很难从代码中对您的需求进行逆向工程,这些代码不仅行不通,而且编写时对语言的性质有完全错误的假设。最好先说出您想要实现的目标,然后重新开始:给出您的输入和您想要的输出,并明确它们之间的关系。
【讨论】:
以上是关于如何在 XSLT 中打破 for-each 以及如何更新 XSLT 中的现有变量的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 XSLT 转换中用应用模板替换 for-each?