【问题标题】:How to Store For Loop Result into XSLT Variable如何将 For 循环结果存储到 XSLT 变量中
【发布时间】:2025-12-08 01:05:01
【问题描述】:

我有以下 XSLT,我想将 for 循环结果保存到 XSLT 变量或 DP 变量中

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:variable name="Variable_01">88888,777777</xsl:variable>
    <xsl:variable name="Variable_02">abc,xyz</xsl:variable>
    <root>
        <xsl:for-each select="tokenize($Variable_01, ',')">
            <xsl:variable name="i" select="position()"/>
            <xsl:text>{"Group":"</xsl:text>
            <xsl:value-of select="."/>
            <xsl:text>", "Name":"</xsl:text>
            <xsl:value-of select="tokenize($Variable_02, ',')[$i]"/>
            <xsl:text>"}</xsl:text>
            <xsl:if test="position()!=last()">
                <xsl:text>,</xsl:text>
            </xsl:if>
        </xsl:for-each>
    </root>
</xsl:template>

【问题讨论】:

    标签: xslt xslt-2.0 ibm-datapower


    【解决方案1】:

    xsl:variable 包裹xsl:for-eachxsl:for-each 的乘积将分配给该变量。

    以下演示了如何做到这一点:

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="/">
            <xsl:variable name="Variable_01">88888,777777</xsl:variable>
            <xsl:variable name="Variable_02">abc,xyz</xsl:variable>
            <root>
                <xsl:variable name="Variable_03">
                   <xsl:for-each select="tokenize($Variable_01, ',')">
                       <xsl:variable name="i" select="position()"/>
                       <xsl:text>{"Group":"</xsl:text>
                       <xsl:value-of select="."/>
                       <xsl:text>", "Name":"</xsl:text>
                       <xsl:value-of select="tokenize($Variable_02, ',')[$i]"/>
                       <xsl:text>"}</xsl:text>
                       <xsl:if test="position()!=last()">
                           <xsl:text>,</xsl:text>
                       </xsl:if>
                   </xsl:for-each>
                </xsl:variable>
                <xsl:sequence select="$Variable_03"/>
            </root>
        </xsl:template>
    </xsl:stylesheet>
    

    您还可以将该变量声明和 for-each 移到根元素之外:

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="/">
            <xsl:variable name="Variable_01">88888,777777</xsl:variable>
            <xsl:variable name="Variable_02">abc,xyz</xsl:variable>
            <xsl:variable name="Variable_03">
                <xsl:for-each select="tokenize($Variable_01, ',')">
                    <xsl:variable name="i" select="position()"/>
                    <xsl:text>{"Group":"</xsl:text>
                    <xsl:value-of select="."/>
                    <xsl:text>", "Name":"</xsl:text>
                    <xsl:value-of select="tokenize($Variable_02, ',')[$i]"/>
                    <xsl:text>"}</xsl:text>
                    <xsl:if test="position()!=last()">
                        <xsl:text>,</xsl:text>
                    </xsl:if>
                </xsl:for-each>
            </xsl:variable>
            <root>
                <xsl:sequence select="$Variable_03"/>
            </root>
        </xsl:template>
    </xsl:stylesheet>
    

    【讨论】: