简体   繁体   中英

XSLT - Accessing outer element with inner loop of nested for-each loop

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>

使用<xsl:value-of select="../currency"/>向上导航。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM