Как сохранить результат цикла в переменную XSLT - PullRequest
0 голосов
/ 13 декабря 2018

У меня ниже XSLT, и я хочу сохранить результат цикла в переменную 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>

1 Ответ

0 голосов
/ 14 декабря 2018

Оберните xsl:for-each xsl:variable, и произведение xsl: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>

Вы также можете переместить это объявление переменной и для каждого вне корневого элемента:

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