I am getting an XML in the below format from one of the system. I need to transform the XML.
<parentTag>
<childTag>
<date>28-Jan-2017</date>
<code>DoB</code>
<oldStatus>g</oldStatus>
<newStatus>22</newStatus>
</childTag>
<childTag>
<date>27-Jan-2017</date>
<code>www</code>
<oldStatus>25</oldStatus>
<newStatus>g</newStatus>
</childTag>
<childTag>
<date>26-Jan-2017</date>
<code>DoB</code>
<oldStatus>56</oldStatus>
<newStatus>73</newStatus>
</childTag>
<childTag>
<date>26-Jan-2017</date>
<code>www</code>
<oldStatus>66</oldStatus>
<newStatus>55</newStatus>
</childTag>
</parentTag>
I need to collect all the details for each of the code and transform the XML as below using XSLT 1.0.
<parentTag>
<childTag>
<code>DoB</code>
<status>
<date>28-Jan-2017</date>
<oldStatus>g</oldStatus>
<newStatus>22</newStatus>
</status>
<status>
<date>26-Jan-2017</date>
<oldStatus>56</oldStatus>
<newStatus>73</newStatus>
</status>
</childTag>
<childTag>
<code>www</code>
<status>
<date>27-Jan-2017</date>
<oldStatus>25</oldStatus>
<newStatus>g</newStatus>
</status>
<status>
<date>26-Jan-2017</date>
<oldStatus>66</oldStatus>
<newStatus>55</newStatus>
</status>
</childTag>
</parentTag>
I request you to help on this.
thanks.
You can use muenchian grouping in xslt 1.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:key name="keycode" match="childTag" use="code"/>
<xsl:template match="parentTag">
<xsl:copy>
<xsl:for-each select="childTag[generate-id() = generate-id(key('keycode', code)[1])]">
<childTag>
<xsl:copy-of select="code"/>
<xsl:variable name="currentcode" select="normalize-space(code)"/>
<xsl:for-each select="key('keycode', $currentcode)">
<status>
<xsl:copy-of select="date|oldStatus|newStatus"/>
</status>
</xsl:for-each>
</childTag>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
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.