Umaimath Thonikkadavan
Umaimath Thonikkadavan

Reputation: 133

XSLT How to append one child element if another child element is repeating

I have an XML where there are two child elements, I want to append second child elements if the first one is repeating. Below is the request XML

<SelectedOffer>                     
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_ADT</OfferItemRefID>
    <PaxRefID>PAX1</PaxRefID>   
</SelectedOfferItem>
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_ADT</OfferItemRefID>
    <PaxRefID>PAX2</PaxRefID>
</SelectedOfferItem>
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_CHD</OfferItemRefID>
    <PaxRefID>PAX3 </PaxRefID>
</SelectedOfferItem>
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_CHD</OfferItemRefID>
    <PaxRefID>PAX4</PaxRefID>
</SelectedOfferItem>
<SelectedOfferItem>
    <OfferItemRefID>SP2F-58379439-103-1_INF</OfferItemRefID>
    <PaxRefID>PAX5</PaxRefID>
</SelectedOfferItem>                        

Expected result would be like

<OfferItems>
<OfferItem OfferItemID="SP2F-58379439-103-1_ADT">
    <PassengerRefs>PAX1 PAX2</PassengerRefs>
</OfferItem>
<OfferItem OfferItemID="SP2F-58379439-103-1_CHD">
    <PassengerRefs>PAX3 PAX4</PassengerRefs>
</OfferItem>
<OfferItem OfferItemID="SP2F-58379439-103-1_INF">
    <PassengerRefs>PAX5</PassengerRefs>
</OfferItem>

Upvotes: 0

Views: 69

Answers (1)

Michael Kay
Michael Kay

Reputation: 163282

In XSLT 2.0 it's as simple as

<xsl:for-each-group select="SelectedOfferItem" group-adjacent="OfferItemRefID">
  <OfferItem OfferItemId="{current-grouping-key()}">
    <PassengerRefs>
      <xsl:value-of select="current-group()/PaxRefID"/>
    </PassengerRefs>
  </OfferItem>
</xsl:for-each-group>

Upvotes: 1

Related Questions