bookmark_borderXSLT 2.0 – Register result of a nested for-each to an iterable variable

Example of data structure :

<root>
    <object name="test">
        <package name="a">
            <loot>
                <item value="1" />
                <item value="2" />
            </loot>
        </package>
        <package name="b">
            <loot>
                <item value="5" />
                <item value="6" />
            </loot>
        </package>
        <session name="amazon">
            <packages>
                <package name="a" />
                <package name="b" />
            </packages>
        </session>
        <session name="wish">
            <packages>
                <package name="a" />
                <package name="b" />
            </packages>
        </session>
    </object>
</root>

To extract an iterable list of all items related to all packages specified in a session :

<xsl:variable name="items">
    <xsl:for-each select="//object/session[@name='amazon']/packages/package">
        <xsl:for-each select="//object/package[@name=current()/@name]/loot/item">
            <xsl:variable name="index">
                <xsl:number level="any" count="item"/>
            </xsl:variable>
            <xsl:if test="number($index)!=1">
                <xsl:text>,</xsl:text>
            </xsl:if>
            <xsl:value-of select="current()/@value"/>
        </xsl:for-each>
    </xsl:for-each>
</xsl:variable>
<xsl:for-each select="tokenize($items, ',')">
    <p>
        <xsl:value-of select="." />
    </p>
</xsl:for-each>

Result :

<p>1</p>
<p>2</p>
<p>5</p>
<p>6</p>