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>