Reputation: 133
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
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