xml - All tags one level, order group and sort in xslt -


i have issue xml (salesorder). import file (csv) xml-structure. tool used automatic creates xml file same structure. tags on same level.

<?xml version="1.0" encoding="utf-8"?> <order> <env>     <sendercode>1234</sendercode>     <test>n</test> </env> <hdr>     <ordernumber>100</ordernumber>     <orderdate>201206080000</orderdate> </hdr> <row>     <linenumber>1</linenumber>     <article>a</article> </row> <row>     <linenumber>2</linenumber>     <article>b</article> </row> <row>     <linenumber>3</linenumber>     <article>c</article> </row> <row>     <linenumber>4</linenumber>     <article>d</article> </row> <hdr>     <ordernumber>101</ordernumber>     <orderdate>201206080000</orderdate> </hdr> <row>     <linenumber>1</linenumber>     <article>e</article> </row> <row>     <linenumber>2</linenumber>     <article>f</article> </row> </order> 

the output need is:

<?xml version="1.0" encoding="utf-8"?> <order>   <env>     <sendercode>1234</sendercode>     <test>n</test>   </env>   <hdr>     <ordernumber>100</ordernumber>     <orderdate>201206080000</orderdate>     <row>       <linenumber>1</linenumber>       <article>a</article>     </row>     <row>       <linenumber>2</linenumber>       <article>b</article>     </row>     <row>       <linenumber>3</linenumber>       <article>c</article>     </row>     <row>       <linenumber>4</linenumber>       <article>d</article>     </row>   </hdr>   <env>     <sendercode>1234</sendercode>     <test>n</test>   </env>   <hdr>     <ordernumber>101</ordernumber>     <orderdate>201206080000</orderdate>     <row>       <linenumber>1</linenumber>       <article>e</article>     </row>     <row>       <linenumber>2</linenumber>       <article>f</article>     </row>   </hdr> </order> 

how xslt? when tried this, 6 row tags under both hdr(1) , hdr(2).

<?xml version="1.0" encoding="utf-8"?> <order> <env>     <sendercode>1234</sendercode>     <test>n</test> </env> <hdr>     <ordernumber>100</ordernumber>     <orderdate>201206080000</orderdate>     <row>         <linenumber>1</linenumber>         <article>a</article>     </row>     <row>         <linenumber>2</linenumber>         <article>b</article>     </row>     <row>         <linenumber>3</linenumber>         <article>c</article>     </row>     <row>         <linenumber>4</linenumber>         <article>d</article>     </row>     <row>         <linenumber>1</linenumber>         <article>e</article>     </row>     <row>         <linenumber>2</linenumber>         <article>f</article>     </row> </hdr> <env>     <sendercode>1234</sendercode>     <test>n</test> </env> <hdr>     <ordernumber>101</ordernumber>     <orderdate>201206080000</orderdate>     <row>         <linenumber>1</linenumber>         <article>a</article>     </row>     <row>         <linenumber>2</linenumber>         <article>b</article>     </row>     <row>         <linenumber>3</linenumber>         <article>c</article>     </row>     <row>         <linenumber>4</linenumber>         <article>d</article>     </row>     <row>         <linenumber>1</linenumber>         <article>e</article>     </row>     <row>         <linenumber>2</linenumber>         <article>f</article>     </row> </hdr> </order> 

could me?

thanks

this transform ask. uses key identify row elements following each hdr.

<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform">    <xsl:strip-space elements="*"/>   <xsl:output method="xml" indent="yes" />    <xsl:key name="row-by-hdr-id" match="row" use="generate-id(preceding-sibling::hdr[1])"/>    <xsl:template match="node()">     <xsl:copy>       <xsl:apply-templates/>     </xsl:copy>   </xsl:template>    <xsl:template match="/order">     <xsl:copy>       <xsl:apply-templates select="hdr"/>     </xsl:copy>   </xsl:template>    <xsl:template match="hdr">     <xsl:apply-templates select="preceding-sibling::env"/>     <xsl:copy>       <xsl:apply-templates/>       <xsl:apply-templates select="key('row-by-hdr-id', generate-id())"/>     </xsl:copy>   </xsl:template>  </xsl:stylesheet> 

output

<?xml version="1.0" encoding="utf-8"?> <order>    <env>       <sendercode>1234</sendercode>       <test>n</test>    </env>    <hdr>       <ordernumber>100</ordernumber>       <orderdate>201206080000</orderdate>       <row>          <linenumber>1</linenumber>          <article>a</article>       </row>       <row>          <linenumber>2</linenumber>          <article>b</article>       </row>       <row>          <linenumber>3</linenumber>          <article>c</article>       </row>       <row>          <linenumber>4</linenumber>          <article>d</article>       </row>    </hdr>    <env>       <sendercode>1234</sendercode>       <test>n</test>    </env>    <hdr>       <ordernumber>101</ordernumber>       <orderdate>201206080000</orderdate>       <row>          <linenumber>1</linenumber>          <article>e</article>       </row>       <row>          <linenumber>2</linenumber>          <article>f</article>       </row>    </hdr> </order> 

Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -