如何在 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?

xslt for-each 和排序问题

XSLT for-each 无法提取值

for-each 并使用 xslt 对 xml 进行排序和分组

从多个for-each XSLT段输出HTML

在 msxsl 中将节点作为参数传递:来自 XSLT for-each 的脚本 javascript 函数不起作用