Reputation: 99
I have the below sample source XML data. now i need to get the output in such a way that each serial number has to be printed with its productNo value conactinated by pipe symbol with the help of XSLT.
<orders>
<orderItems>
<productNo>500656-B21</productNo>
<serialNumber>KRW13707EV</serialNumber>
<serialNumber>PR9137RFRV</serialNumber>
<serialNumber>PR9137RFRW</serialNumber>
<serialNumber>PR9137RFRX</serialNumber>
</orderItems>
<orderItems>
<productNo>500686-B21</productNo>
<serialNumber>KRW13807EZ</serialNumber>
<serialNumber>PR9138RFRD</serialNumber>
<serialNumber>PR9138RFRY</serialNumber>
<serialNumber>PR9138RF51</serialNumber>
</orderItems>
<orderItems>
<productNo>500693-B26</productNo>
<serialNumber>KRW139075V</serialNumber>
<serialNumber>PR9139RFXV</serialNumber>
<serialNumber>PR9139RFW7</serialNumber>
<serialNumber>PR9139RFZ5</serialNumber>
</orderItems>
</orders>
Expected Output is:
<orders>
<serialNo>500656-B21|KRW13707EV</serialNo>
<serialNo>500656-B21|PR9137RFRV</serialNo>
<serialNo>500656-B21|PR9137RFRW</serialNo>
<serialNo>500656-B21|PR9137RFRX</serialNo>
<serialNo>500686-B21|KRW13807EZ</serialNo>
<serialNo>500686-B21|PR9138RFRD</serialNo>
<serialNo>500686-B21|PR9138RFRY</serialNo>
<serialNo>500686-B21|PR9138RF51</serialNo>
<serialNo>500693-B26|KRW139075V</serialNo>
<serialNo>500693-B26|PR9139RFXV</serialNo>
<serialNo>500693-B26|PR9139RFW7</serialNo>
<serialNo>500693-B26|PR9139RFZ5</serialNo>
</orders>
Thanks for your help.
Upvotes: 0
Views: 1147
Reputation: 167491
<xsl:template match="orders">
<xsl:copy>
<xsl:apply-templates select="orderItems/serialNumber"/>
</xsl:copy>
</xsl:template>
<xsl:template match="serialNumber">
<serialNo>
<xsl:value-of select="concat(../productNo, '|', .)"/>
</serialNo>
</xsl:template>
<xsl:output indent="yes"/>
should suffice.
Upvotes: 1