0

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>

  • 1
    This is a *grouping* question. Do a search - it's probably the most often asked XSLT question here. Note that answers are different for XSLT 1.0 or 2.0. – michael.hor257k Jun 14 '20 at 10:03
  • Thank you for the suggestion, I could see some similar questions now. https://stackoverflow.com/questions/12374327/grouping-with-xslt-and-child-nodes – Umaimath Thonikkadavan Jun 14 '20 at 10:55

1 Answers1

1

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>
Michael Kay
  • 156,231
  • 11
  • 92
  • 164