I am new to XSLT and have a problem that requires me to access the values from elements in a outer loop of a nested for-each within the inner loop. My XML looks as follows
<searchresults>
<journeygroup>
<journeygroupnum>1</journeygroupnum>
<journeydetails>
<flightsegments>1</flightsegments>
<journeyid>1</journeyid>
<currency>USD</currency>
<fare>399.00</fare>
<taxes>99.00</taxes>
<flights>
<segmentid>1</segmentid>
<legid>1</legid>
<marketingcarrier>DL</marketingcarrier>
<operatingcarrier>DL</operatingcarrier>
<flightnum>9695</flightnum>
</flights>
</journeydetails>
<journeydetails>
<flightsegments>1</flightsegments>
<journeyid>2</journeyid>
<currency>USD</currency>
<fare>459.00</fare>
<taxes>129.00</taxes>
<flights>
<segmentid>1</segmentid>
<legid>1</legid>
<marketingcarrier>AA</marketingcarrier>
<operatingcarrier>AA</operatingcarrier>
<flightnum>5070</flightnum>
</flights>
</journeydetails>
</journeygroup>
</searchresults>
An extract of my XSLT document looks as follows
<table>
<xsl:for-each select="searchresults/journeygroup/journeydetails">
<xsl:for-each select="flights[segmentid='1']">
<tr>
<td><xsl:value-of select="marketingcarrier"/></td>
<td><xsl:value-of select="operatingcarrier"/></td>
<td><xsl:value-of select="flightnum"/></td>
<!-- Here I would like to add columns with the currency and fare from the outer loop -->
<td>currency</td>
<td>fare</td>
</tr>
</xsl:for-each>
</xsl:for-each>
<table>
How do I access values from the currency and fare nodes in the outer loop from the inner for-each loop.
You can access the parent relatively:
<xsl:value-of select="../currency"/>
Or capture the outside loop current node with a variable and then access it inside:
<table>
<xsl:for-each select="searchresults/journeygroup/journeydetails">
<xsl:variable name="journeyDetails" select="."/>
<xsl:for-each select="flights[segmentid='1']">
<tr>
<td><xsl:value-of select="marketingcarrier"/></td>
<td><xsl:value-of select="operatingcarrier"/></td>
<td><xsl:value-of select="flightnum"/></td>
<!-- Here I would like to add columns with the
currency and fare from the outer loop -->
<td><xsl:value-of select="$journeyDetails/currency"/></td>
<td><xsl:value-of select="$journeyDetails/fare"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
Use the parent axis, aka the .. operator.
<table>
<xsl:for-each select="searchresults/journeygroup/journeydetails">
<xsl:for-each select="flights[segmentid='1']">
<tr>
<td><xsl:value-of select="marketingcarrier"/></td>
<td><xsl:value-of select="operatingcarrier"/></td>
<td><xsl:value-of select="flightnum"/></td>
<!-- Here I would like to add columns with the currency and fare from the outer loop -->
<td><xsl:value-of select="../currency"/></td>
<td><xsl:value-of select="../fare"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
<table>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With