0

I would like to know if it's possible to transform this:

    <?xml version="1.0" encoding="UTF-8"?>
    <XML>
    <GLOBAL_DETORDERLBL>ORDER</GLOBAL_DETORDERLBL>
    <GLOBAL_DETCUSTLBL>CUST</GLOBAL_DETCUSTLBL>
    <GLOBAL_DETAANTLBL>QTY</GLOBAL_DETAANTLBL>
    <GLOBAL_DETKLEURLBL>KLEUR</GLOBAL_DETKLEURLBL>
    <GLOBAL_DETCOMPLBL>COMPONENTS</GLOBAL_DETCOMPLBL>
    <GLOBAL_DETPROFLBL>PROFILE</GLOBAL_DETPROFLBL>
    <GLOBAL_PROFIEL></GLOBAL_PROFIEL>
    <GLOBAL_PROFIELLBL>PROFILE:</GLOBAL_PROFIELLBL>
    <GLOBAL_CATTO>NIEUW</GLOBAL_CATTO>
    <GLOBAL_CATFR>NIEUW</GLOBAL_CATFR>
    <GLOBAL_CAT2LBL>CAT 2  :</GLOBAL_CAT2LBL>
    <GLOBAL_GROEP2></GLOBAL_GROEP2>
    <GLOBAL_GROEP1></GLOBAL_GROEP1>
    <GLOBAL_GROEPLBL>GROUP  :</GLOBAL_GROEPLBL>
    <GLOBAL_TEXT></GLOBAL_TEXT>
    <GLOBAL_TEXTLBL>TEKST :</GLOBAL_TEXTLBL>
    <GLOBAL_ORDER15></GLOBAL_ORDER15>
    <GLOBAL_ORDER14></GLOBAL_ORDER14>
    <GLOBAL_ORDER13></GLOBAL_ORDER13>
    <GLOBAL_ORDER12></GLOBAL_ORDER12>
    <GLOBAL_ORDER11></GLOBAL_ORDER11>
    <GLOBAL_ORDER10></GLOBAL_ORDER10>
    <GLOBAL_ORDER9></GLOBAL_ORDER9>
    <GLOBAL_ORDER8></GLOBAL_ORDER8>
    <GLOBAL_ORDER7></GLOBAL_ORDER7>
    <GLOBAL_ORDER6></GLOBAL_ORDER6>
    <GLOBAL_DATE>27/03/14</GLOBAL_DATE>
    <GLOBAL_DATELBL>DATE  :</GLOBAL_DATELBL>
    <GLOBAL_ORDER5></GLOBAL_ORDER5>
    <GLOBAL_ORDER4></GLOBAL_ORDER4>
    <GLOBAL_ORDER3></GLOBAL_ORDER3>
    <GLOBAL_ORDER2></GLOBAL_ORDER2>
    <GLOBAL_ORDER1></GLOBAL_ORDER1>
    <GLOBAL_ORDERSLBL>ORDERS :</GLOBAL_ORDERSLBL>
    <GLOBAL_WORKCENTER>Insulation bicolor machine 1</GLOBAL_WORKCENTER>
    <GLOBAL_WORKCENTERLBL>Workcenter</GLOBAL_WORKCENTERLBL>
    <GLOBAL_INROL>  38043</GLOBAL_INROL>
    <GLOBAL_INROLBILBL>INROLBON BICOLORS</GLOBAL_INROLBILBL>
    <GLOBAL_ADRES>Aliplast Sp. z o.o.
    20-276 Lublin</GLOBAL_ADRES>
    <GLOBAL_PAGELBL>Page</GLOBAL_PAGELBL>
    <FIELD_NEWPROD></FIELD_NEWPROD>
    <FIELD_MANR>IP011/9016M/6.5</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>   30</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER></FIELD_CONTAINER>
    <FIELD_PRODORDER>       6242586</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC>XIP011B</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS></FIELD_BATS>
    <FIELD_STOCKSIGN></FIELD_STOCKSIGN>
    <FIELD_QTY>   30</FIELD_QTY>
    <FIELD_NAME></FIELD_NAME>
    <FIELD_PRDC>XIP011A</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS></FIELD_BATS>
    <FIELD_STOCKSIGN></FIELD_STOCKSIGN>
    <FIELD_QTY>   30</FIELD_QTY>
    <FIELD_NAME></FIELD_NAME>
    <FIELD_PRDC>P4710</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS></FIELD_BATS>
    <FIELD_STOCKSIGN></FIELD_STOCKSIGN>
    <FIELD_QTY>   30</FIELD_QTY>
    <FIELD_NAME></FIELD_NAME>
    <FIELD_PRDC>P4711</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS></FIELD_BATS>
    <FIELD_STOCKSIGN></FIELD_STOCKSIGN>
    <FIELD_QTY>   30</FIELD_QTY>
    <FIELD_NAME></FIELD_NAME>
<FIELD_NEWPROD>...
    </XML>

to

    <?xml version="1.0" encoding="UTF-8"?>
    <XML>
        <GLOBAL_DETORDERLBL>ORDER</GLOBAL_DETORDERLBL>
        <GLOBAL_DETCUSTLBL>CUST</GLOBAL_DETCUSTLBL>
        <GLOBAL_DETAANTLBL>QTY</GLOBAL_DETAANTLBL>
        <GLOBAL_DETKLEURLBL>KLEUR</GLOBAL_DETKLEURLBL>
        <GLOBAL_DETCOMPLBL>COMPONENTS</GLOBAL_DETCOMPLBL>
        <GLOBAL_DETPROFLBL>PROFILE</GLOBAL_DETPROFLBL>
        <GLOBAL_PROFIEL/>
        <GLOBAL_PROFIELLBL>PROFILE:</GLOBAL_PROFIELLBL>
        <GLOBAL_CATTO>NIEUW</GLOBAL_CATTO>
        <GLOBAL_CATFR>NIEUW</GLOBAL_CATFR>
        <GLOBAL_CAT2LBL>CAT 2  :</GLOBAL_CAT2LBL>
        <GLOBAL_GROEP2/>
        <GLOBAL_GROEP1/>
        <GLOBAL_GROEPLBL>GROUP  :</GLOBAL_GROEPLBL>
        <GLOBAL_TEXT/>
        <GLOBAL_TEXTLBL>TEKST :</GLOBAL_TEXTLBL>
        <GLOBAL_ORDER15/>
        <GLOBAL_ORDER14/>
        <GLOBAL_ORDER13/>
        <GLOBAL_ORDER12/>
        <GLOBAL_ORDER11/>
        <GLOBAL_ORDER10/>
        <GLOBAL_ORDER9/>
        <GLOBAL_ORDER8/>
        <GLOBAL_ORDER7/>
        <GLOBAL_ORDER6/>
        <GLOBAL_DATE>27/03/14</GLOBAL_DATE>
        <GLOBAL_DATELBL>DATE  :</GLOBAL_DATELBL>
        <GLOBAL_ORDER5/>
        <GLOBAL_ORDER4/>
        <GLOBAL_ORDER3/>
        <GLOBAL_ORDER2/>
        <GLOBAL_ORDER1/>
        <GLOBAL_ORDERSLBL>ORDERS :</GLOBAL_ORDERSLBL>
        <GLOBAL_WORKCENTER>Insulation bicolor machine 1</GLOBAL_WORKCENTER>
        <GLOBAL_WORKCENTERLBL>Workcenter</GLOBAL_WORKCENTERLBL>
        <GLOBAL_INROL>  38043</GLOBAL_INROL>
        <GLOBAL_INROLBILBL>INROLBON BICOLORS</GLOBAL_INROLBILBL>
        <GLOBAL_ADRES></GLOBAL_ADRES>
        <GLOBAL_PAGELBL>Page</GLOBAL_PAGELBL>
        <LINE>
        <FIELD_NEWPROD/>
        <FIELD_MANR>IP011/9016M/6.5</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>   30</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242586</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <ITEM>
        <FIELD_PRDC>XIP011B</FIELD_PRDC>
        <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
        <FIELD_BATS/>
        <FIELD_STOCKSIGN/>
        <FIELD_QTY>   30</FIELD_QTY>
        <FIELD_NAME/>
        </ITEM>
        <ITEM>
        <FIELD_PRDC>XIP011A</FIELD_PRDC>
        <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
        <FIELD_BATS/>
        <FIELD_STOCKSIGN/>
        <FIELD_QTY>   30</FIELD_QTY>
        <FIELD_NAME/>
        </ITEM>
        <ITEM>
        <FIELD_PRDC>P4710</FIELD_PRDC>
        <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
        <FIELD_BATS/>
        <FIELD_STOCKSIGN/>
        <FIELD_QTY>   30</FIELD_QTY>
        <FIELD_NAME/>
        </ITEM>
        <ITEM>
        <FIELD_PRDC>P4711</FIELD_PRDC>
        <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
        <FIELD_BATS/>
        <FIELD_STOCKSIGN/>
        <FIELD_QTY>   30</FIELD_QTY>
        <FIELD_NAME/>
        </ITEM>
        </LINE>
<LINE>...
    </XML>

using xslt 1.0

LINE is generated when FIELD_NEWPROD is matched, ITEM is a subgroup in LINE when FIELD_PRDC is matched. All FIELD_* are possible to form groups but only those defined should make them. (like FIELD_NEWPROD)

I need an example that I can expand with more depth (deeper levels on root, LINE and ITEM). Before I looked at XSLT, I used my own definition to make grouping but it's only 1-level deep.

<GROUP name="ORDER" value="FIELD_ORDNOLBL"/>
    <GROUP name="LIJN" value="FIELD_PRDITM"/>
    <GROUP name="TOTAL_ORDER" value="FIELD_TOTALLBL"/>
    <GROUP name="COMMOD" value="FIELD_COMCODLBL"/>
    <GROUP name="SERIENR" value="FIELD_SENOLBL"/>
    <GROUP name="TOTAL" value="FIELD_TOTLBL"/>

This is how I created groups but now I need a definition that can also handle nested groups. *(This applies to another job so the data is not not relevent to this example)*

I'm totally new to xsl and wish to learn it through a practical example. I'll be transforming the xml in C# to produce the above result but I'm missing the first steps to create an xsl file.

static void Main(string[] args)
{

    List<String> _lines = Lines("ALR494AL.dat");
    List<KeyValuePair<String, String>> _library = Library(_lines);
    String _xml = XMLDocument(_library);

    StringBuilder _result = new StringBuilder();

    XPathDocument _xpd = new XPathDocument(new StringReader(_xml));
    XslCompiledTransform _xct = new XslCompiledTransform();
    XmlWriter _writer = XmlWriter.Create(_result);

    _xct.Load("ALR494AL.xsl");
    _xct.Transform(_xpd, null, _writer);

}

Your help is greatly appreciated!

grmbl
  • 2,514
  • 4
  • 29
  • 54
  • Just a curiosity: why not using XLinq, which could take the task far easier and (probably) faster? – Mario Vernari Mar 28 '14 at 14:07
  • Hi Mario, I need to have some kind of external definition because files can have their own "jobs". And grouping/nesting has to be defined outside the program. But I will take a look at xlinq and see if I can interpret my configuration somehow. – grmbl Mar 30 '14 at 13:58
  • Please add (or edit) the required output to match your updated input **and** explain the **rules** by which the output should be produced. An example can go only so far (not far enough in this case, IMHO). – michael.hor257k Mar 30 '14 at 16:57
  • Hi Michael, I've updated my question. I can't believe there is not a general "golden" solution for this problem. (Flat XML > Grouped XML with nesting) – grmbl Mar 30 '14 at 17:55
  • Can the input contain more than one `` element? – michael.hor257k Mar 30 '14 at 18:16
  • Yes Michael, assume the example (under root) can be repeated. – grmbl Mar 30 '14 at 18:34
  • I updated the questions examples to reflect that. – grmbl Mar 30 '14 at 18:39

3 Answers3

2

With the use of XSLT 2.0 you can use <xsl:for-each-group select="[YOUR SELECTION]" group-starting-with="[TO START THE GROUP]", see next XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="TEST">
        <xsl:copy>
            <xsl:for-each-group select="child::*" group-starting-with="FIELD_NEWPROD">
                <xsl:choose>
                    <xsl:when test="self::FIELD_NEWPROD">
                        <ITEM>
                            <xsl:for-each-group select="current-group()" group-starting-with="FIELD_PRDC">
                                <xsl:choose>
                                    <xsl:when test="self::FIELD_PRDC">
                                        <DETAIL>
                                            <xsl:apply-templates select="current-group()"/>
                                        </DETAIL>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <xsl:apply-templates select="current-group()"/>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </xsl:for-each-group>
                        </ITEM>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:apply-templates select="current-group()"/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

When applied on this XML:

<?xml version="1.0" encoding="UTF-8"?>
<TEST>
    <GLOBAL_DETORDERLBL>ORDER</GLOBAL_DETORDERLBL>
    <GLOBAL_DETCUSTLBL>CUST</GLOBAL_DETCUSTLBL>
    <GLOBAL_DETAANTLBL>QTY</GLOBAL_DETAANTLBL>
    <GLOBAL_DETKLEURLBL>KLEUR</GLOBAL_DETKLEURLBL>
    <GLOBAL_DETCOMPLBL>COMPONENTS</GLOBAL_DETCOMPLBL>
    <GLOBAL_DETPROFLBL>PROFILE</GLOBAL_DETPROFLBL>
    <GLOBAL_PROFIEL/>
    <GLOBAL_PROFIELLBL>PROFILE:</GLOBAL_PROFIELLBL>
    <GLOBAL_CATTO>NIEUW</GLOBAL_CATTO>
    <GLOBAL_CATFR>NIEUW</GLOBAL_CATFR>
    <GLOBAL_CAT2LBL>CAT 2  :</GLOBAL_CAT2LBL>
    <GLOBAL_GROEP2/>
    <GLOBAL_GROEP1/>
    <GLOBAL_GROEPLBL>GROUP  :</GLOBAL_GROEPLBL>
    <GLOBAL_TEXT/>
    <GLOBAL_TEXTLBL>TEKST :</GLOBAL_TEXTLBL>
    <GLOBAL_ORDER15/>
    <GLOBAL_ORDER14/>
    <GLOBAL_ORDER13/>
    <GLOBAL_ORDER12/>
    <GLOBAL_ORDER11/>
    <GLOBAL_ORDER10/>
    <GLOBAL_ORDER9/>
    <GLOBAL_ORDER8/>
    <GLOBAL_ORDER7/>
    <GLOBAL_ORDER6/>
    <GLOBAL_DATE>27/03/14</GLOBAL_DATE>
    <GLOBAL_DATELBL>DATE  :</GLOBAL_DATELBL>
    <GLOBAL_ORDER5/>
    <GLOBAL_ORDER4/>
    <GLOBAL_ORDER3/>
    <GLOBAL_ORDER2/>
    <GLOBAL_ORDER1/>
    <GLOBAL_ORDERSLBL>ORDERS :</GLOBAL_ORDERSLBL>
    <GLOBAL_WORKCENTER>Insulation bicolor machine 1</GLOBAL_WORKCENTER>
    <GLOBAL_WORKCENTERLBL>Workcenter</GLOBAL_WORKCENTERLBL>
    <GLOBAL_INROL>  38043</GLOBAL_INROL>
    <GLOBAL_INROLBILBL>INROLBON BICOLORS</GLOBAL_INROLBILBL>
    <GLOBAL_ADRES></GLOBAL_ADRES>
    <GLOBAL_PAGELBL>Page</GLOBAL_PAGELBL>
    <FIELD_NEWPROD/>
    <FIELD_MANR>IP011/9016M/6.5</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>   30</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242586</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC>XIP011B</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>   30</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>XIP011A</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>   30</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4710</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>   30</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4711</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>   30</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_NEWPROD/>
    <FIELD_MANR>IP054</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>    4</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242569</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_TEXTMFG>UWAGA DZ. HANDLOWY</FIELD_TEXTMFG>
    <FIELD_TEXTMFG>przy bikolorze dopytac Klienta czy ma wystawac profil z zewn�trz</FIELD_TEXTMFG>
    <FIELD_TEXTMFG>czy od wewn�trz konstrukcji.</FIELD_TEXTMFG>
    <FIELD_TEXTMFG>I z taka informacja do Kamila Ku�</FIELD_TEXTMFG>
    <FIELD_PRDC>XIP054B</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS>9016M</FIELD_BATS>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    4</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>XIP053A</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS>9016M</FIELD_BATS>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    4</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4722</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    8</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY/>
    <FIELD_NAME/>
    <FIELD_NEWPROD/>
    <FIELD_MANR>IP721</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>    1</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242570</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC>XIP721B</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS>9016M</FIELD_BATS>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>XIP021A</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS>9016M</FIELD_BATS>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4709</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4711</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_NEWPROD/>
    <FIELD_MANR>IP814/9016M/6.5</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>    2</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242582</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC>XIP814B</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    2</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>XIP814A</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    2</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4731</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    4</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY/>
    <FIELD_NAME/>
    <FIELD_NEWPROD/>
    <FIELD_MANR>IP824/9016M/6.5</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>    3</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242583</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    3</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    3</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4731</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    6</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY/>
    <FIELD_NAME/>
    <FIELD_NEWPROD/>
    <FIELD_MANR>IP825/9016M/6.5</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>   11</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242585</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>   11</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>   11</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4731</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>   22</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY/>
    <FIELD_NAME/>
    <FIELD_NEWPROD/>
    <FIELD_MANR>IP854</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>    6</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242571</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    6</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    6</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4731</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>   12</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY/>
    <FIELD_NAME/>
    <FIELD_NEWPROD/>
    <FIELD_MANR>SP011/9016M/6.5</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>    1</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242580</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC>XIP011A</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>XIP011B</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4715</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4716</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_NEWPROD/>
    <FIELD_MANR>SP824</FIELD_MANR>
    <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
    <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
    <FIELD_SORN> 338940</FIELD_SORN>
    <FIELD_SQTY>    1</FIELD_SQTY>
    <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
    <FIELD_CONTAINER/>
    <FIELD_PRODORDER>       6242574</FIELD_PRODORDER>
    <FIELD_RIT>2 - 2</FIELD_RIT>
    <FIELD_CNAM>Slovakia</FIELD_CNAM>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    1</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC>P4715</FIELD_PRDC>
    <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY>    2</FIELD_QTY>
    <FIELD_NAME/>
    <FIELD_PRDC/>
    <FIELD_LENGTHH/>
    <FIELD_BATS/>
    <FIELD_STOCKSIGN/>
    <FIELD_QTY/>
    <FIELD_NAME/>
</TEST>

It produces the next output:

<?xml version="1.0" encoding="UTF-8"?>
<TEST>
    <GLOBAL_DETORDERLBL>ORDER</GLOBAL_DETORDERLBL>
    <GLOBAL_DETCUSTLBL>CUST</GLOBAL_DETCUSTLBL>
    <GLOBAL_DETAANTLBL>QTY</GLOBAL_DETAANTLBL>
    <GLOBAL_DETKLEURLBL>KLEUR</GLOBAL_DETKLEURLBL>
    <GLOBAL_DETCOMPLBL>COMPONENTS</GLOBAL_DETCOMPLBL>
    <GLOBAL_DETPROFLBL>PROFILE</GLOBAL_DETPROFLBL>
    <GLOBAL_PROFIEL/>
    <GLOBAL_PROFIELLBL>PROFILE:</GLOBAL_PROFIELLBL>
    <GLOBAL_CATTO>NIEUW</GLOBAL_CATTO>
    <GLOBAL_CATFR>NIEUW</GLOBAL_CATFR>
    <GLOBAL_CAT2LBL>CAT 2  :</GLOBAL_CAT2LBL>
    <GLOBAL_GROEP2/>
    <GLOBAL_GROEP1/>
    <GLOBAL_GROEPLBL>GROUP  :</GLOBAL_GROEPLBL>
    <GLOBAL_TEXT/>
    <GLOBAL_TEXTLBL>TEKST :</GLOBAL_TEXTLBL>
    <GLOBAL_ORDER15/>
    <GLOBAL_ORDER14/>
    <GLOBAL_ORDER13/>
    <GLOBAL_ORDER12/>
    <GLOBAL_ORDER11/>
    <GLOBAL_ORDER10/>
    <GLOBAL_ORDER9/>
    <GLOBAL_ORDER8/>
    <GLOBAL_ORDER7/>
    <GLOBAL_ORDER6/>
    <GLOBAL_DATE>27/03/14</GLOBAL_DATE>
    <GLOBAL_DATELBL>DATE  :</GLOBAL_DATELBL>
    <GLOBAL_ORDER5/>
    <GLOBAL_ORDER4/>
    <GLOBAL_ORDER3/>
    <GLOBAL_ORDER2/>
    <GLOBAL_ORDER1/>
    <GLOBAL_ORDERSLBL>ORDERS :</GLOBAL_ORDERSLBL>
    <GLOBAL_WORKCENTER>Insulation bicolor machine 1</GLOBAL_WORKCENTER>
    <GLOBAL_WORKCENTERLBL>Workcenter</GLOBAL_WORKCENTERLBL>
    <GLOBAL_INROL>  38043</GLOBAL_INROL>
    <GLOBAL_INROLBILBL>INROLBON BICOLORS</GLOBAL_INROLBILBL>
    <GLOBAL_ADRES/>
    <GLOBAL_PAGELBL>Page</GLOBAL_PAGELBL>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>IP011/9016M/6.5</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>   30</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242586</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <DETAIL>
            <FIELD_PRDC>XIP011B</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>   30</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>XIP011A</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>   30</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4710</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>   30</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4711</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>   30</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>IP054</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>    4</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242569</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <FIELD_TEXTMFG>UWAGA DZ. HANDLOWY</FIELD_TEXTMFG>
        <FIELD_TEXTMFG>przy bikolorze dopytac Klienta czy ma wystawac profil z zewn�trz</FIELD_TEXTMFG>
        <FIELD_TEXTMFG>czy od wewn�trz konstrukcji.</FIELD_TEXTMFG>
        <FIELD_TEXTMFG>I z taka informacja do Kamila Ku�</FIELD_TEXTMFG>
        <DETAIL>
            <FIELD_PRDC>XIP054B</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS>9016M</FIELD_BATS>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    4</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>XIP053A</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS>9016M</FIELD_BATS>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    4</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4722</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    8</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY/>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>IP721</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>    1</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242570</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <DETAIL>
            <FIELD_PRDC>XIP721B</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS>9016M</FIELD_BATS>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>XIP021A</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS>9016M</FIELD_BATS>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4709</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4711</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>IP814/9016M/6.5</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>    2</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242582</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <DETAIL>
            <FIELD_PRDC>XIP814B</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    2</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>XIP814A</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    2</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4731</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    4</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY/>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>IP824/9016M/6.5</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>    3</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242583</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    3</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    3</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4731</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    6</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY/>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>IP825/9016M/6.5</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>   11</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242585</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>   11</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>   11</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4731</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>   22</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY/>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>IP854</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>    6</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242571</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    6</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    6</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4731</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>   12</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY/>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>SP011/9016M/6.5</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>    1</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242580</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <DETAIL>
            <FIELD_PRDC>XIP011A</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>XIP011B</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4715</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4716</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
    <ITEM>
        <FIELD_NEWPROD/>
        <FIELD_MANR>SP824</FIELD_MANR>
        <FIELD_LENGTH1>L: 6,50</FIELD_LENGTH1>
        <FIELD_NAME>Hesta s.r.o.</FIELD_NAME>
        <FIELD_SORN> 338940</FIELD_SORN>
        <FIELD_SQTY>    1</FIELD_SQTY>
        <FIELD_DELDAT>01-04-14</FIELD_DELDAT>
        <FIELD_CONTAINER/>
        <FIELD_PRODORDER>       6242574</FIELD_PRODORDER>
        <FIELD_RIT>2 - 2</FIELD_RIT>
        <FIELD_CNAM>Slovakia</FIELD_CNAM>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    1</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC>P4715</FIELD_PRDC>
            <FIELD_LENGTHH>L:6.5</FIELD_LENGTHH>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY>    2</FIELD_QTY>
            <FIELD_NAME/>
        </DETAIL>
        <DETAIL>
            <FIELD_PRDC/>
            <FIELD_LENGTHH/>
            <FIELD_BATS/>
            <FIELD_STOCKSIGN/>
            <FIELD_QTY/>
            <FIELD_NAME/>
        </DETAIL>
    </ITEM>
</TEST>
Mark Veenstra
  • 4,691
  • 6
  • 35
  • 66
  • If the answer suits your question, please use the accept answer button (green tick beside the answer). – Mark Veenstra Mar 28 '14 at 13:40
  • Hi Mark, I've tested your solution but when compiling using MSIE I get the following error: [code] The XML page cannot be displayed Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later. -------------------------------------------------------------------------------- Keyword xsl:copy may not contain xsl:for-each-group. – grmbl Mar 28 '14 at 13:50
  • Does your XSLT processor understand XSLT 2.0 or only XSLT 1.0? I have tested the XSLT in Altova XMLSpy and all is working fine as long as your XSLT processor understands XSLT 2.0 – Mark Veenstra Mar 28 '14 at 13:52
  • Mark, it's MSIE 10.. It ought to understand :) – grmbl Mar 28 '14 at 13:53
  • Browsers don't support XSLT 2.0: http://stackoverflow.com/questions/6282340/which-browsers-support-xslt-2-0-already – Mark Veenstra Mar 28 '14 at 13:55
  • I see, I'll accept your answer and work it out from here, thanks again. – grmbl Mar 28 '14 at 13:55
  • Sadly .Net does not natively support XPATH/XSLT 2.0 so I'll have to use 3d party solutions mentioned here: http://stackoverflow.com/questions/1525299/xpath-and-xslt-2-0-for-net – grmbl Mar 28 '14 at 14:04
  • @grmbl, you should uncheck the answer. – davidkonrad Mar 28 '14 at 21:30
  • I need an XSLT 1.0 solution as I need to perform transformation using a C# application and would like to NOT use 3d party but native .Net Framework XLST 1.0. Is this somehow possible? – grmbl Mar 30 '14 at 14:11
2

I can't believe there is not a general "golden" solution for this problem. (Flat XML > Grouped XML with nesting)

Actually, this is not simple at all, at least not in XSLT 1.0. For this, you can thank the person upstream of you who constructed the specific flat schema of your input. If you have any control over that, perhaps you should look into it. It appears to be a poorly constructed export from a poorly designed database.

Anyway, try:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:key name="line-fields" 
         match="*[starts-with(name(), 'FIELD_')][not(self::FIELD_PRDC)]" 
         use="concat(generate-id(preceding-sibling::FIELD_NEWPROD[1]), '|', count(preceding-sibling::FIELD_PRDC))" />

<xsl:key name="item-headers" 
         match="FIELD_PRDC" 
         use="generate-id(preceding-sibling::FIELD_NEWPROD[1])" />

<xsl:key name="item-fields" 
         match="*[starts-with(name(), 'FIELD_')][not(self::FIELD_PRDC or self::FIELD_NEWPROD)]" 
         use="concat(generate-id(preceding-sibling::FIELD_NEWPROD[1]), '|',  generate-id(preceding-sibling::FIELD_PRDC[1]))" />

<xsl:template match="/XML">
    <xsl:copy>
        <xsl:apply-templates select="*[starts-with(name(), 'GLOBAL_')]"/>
        <xsl:apply-templates select="FIELD_NEWPROD"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="FIELD_NEWPROD">
    <LINE>
        <xsl:copy-of select="."/>
        <xsl:apply-templates select="key('line-fields', concat(generate-id(), '|', count(preceding-sibling::FIELD_PRDC)))"/>
        <xsl:apply-templates select="key('item-headers', generate-id())"/>
    </LINE>
</xsl:template>

<xsl:template match="FIELD_PRDC">
    <ITEM>
        <xsl:copy-of select="."/>
        <xsl:apply-templates select="key('item-fields', concat(generate-id(preceding-sibling::FIELD_NEWPROD[1]), '|',  generate-id()))"/>
    </ITEM>
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

When applied to the following test input:

<XML>
    <GLOBAL_DETORDERLBL>ORDER</GLOBAL_DETORDERLBL>
    <GLOBAL_DETCUSTLBL>CUST</GLOBAL_DETCUSTLBL>
    <GLOBAL_DETAANTLBL>QTY</GLOBAL_DETAANTLBL>


    <FIELD_NEWPROD>A</FIELD_NEWPROD>
    <FIELD_MANR>AA</FIELD_MANR>
    <FIELD_LENGTH1>AB</FIELD_LENGTH1>

    <FIELD_PRDC>A1</FIELD_PRDC>
    <FIELD_LENGTHH>A11</FIELD_LENGTHH>
    <FIELD_BATS>A12</FIELD_BATS>

    <FIELD_PRDC>A2</FIELD_PRDC>
    <FIELD_LENGTHH>A21</FIELD_LENGTHH>
    <FIELD_BATS>A22</FIELD_BATS>

    <FIELD_PRDC>A3</FIELD_PRDC>
    <FIELD_LENGTHH>A31</FIELD_LENGTHH>
    <FIELD_BATS>A32</FIELD_BATS>


    <FIELD_NEWPROD>B</FIELD_NEWPROD>
    <FIELD_MANR>BA</FIELD_MANR>
    <FIELD_LENGTH1>BB</FIELD_LENGTH1>

    <FIELD_PRDC>B1</FIELD_PRDC>
    <FIELD_LENGTHH>B11</FIELD_LENGTHH>
    <FIELD_BATS>B12</FIELD_BATS>

    <FIELD_PRDC>B2</FIELD_PRDC>
    <FIELD_LENGTHH>B21</FIELD_LENGTHH>
    <FIELD_BATS>B22</FIELD_BATS>
</XML>

The result is:

<?xml version="1.0" encoding="UTF-8"?>
<XML>
   <GLOBAL_DETORDERLBL>ORDER</GLOBAL_DETORDERLBL>
   <GLOBAL_DETCUSTLBL>CUST</GLOBAL_DETCUSTLBL>
   <GLOBAL_DETAANTLBL>QTY</GLOBAL_DETAANTLBL>
   <LINE>
      <FIELD_NEWPROD>A</FIELD_NEWPROD>
      <FIELD_MANR>AA</FIELD_MANR>
      <FIELD_LENGTH1>AB</FIELD_LENGTH1>
      <ITEM>
         <FIELD_PRDC>A1</FIELD_PRDC>
         <FIELD_LENGTHH>A11</FIELD_LENGTHH>
         <FIELD_BATS>A12</FIELD_BATS>
      </ITEM>
      <ITEM>
         <FIELD_PRDC>A2</FIELD_PRDC>
         <FIELD_LENGTHH>A21</FIELD_LENGTHH>
         <FIELD_BATS>A22</FIELD_BATS>
      </ITEM>
      <ITEM>
         <FIELD_PRDC>A3</FIELD_PRDC>
         <FIELD_LENGTHH>A31</FIELD_LENGTHH>
         <FIELD_BATS>A32</FIELD_BATS>
      </ITEM>
   </LINE>
   <LINE>
      <FIELD_NEWPROD>B</FIELD_NEWPROD>
      <FIELD_MANR>BA</FIELD_MANR>
      <FIELD_LENGTH1>BB</FIELD_LENGTH1>
      <ITEM>
         <FIELD_PRDC>B1</FIELD_PRDC>
         <FIELD_LENGTHH>B11</FIELD_LENGTHH>
         <FIELD_BATS>B12</FIELD_BATS>
      </ITEM>
      <ITEM>
         <FIELD_PRDC>B2</FIELD_PRDC>
         <FIELD_LENGTHH>B21</FIELD_LENGTHH>
         <FIELD_BATS>B22</FIELD_BATS>
      </ITEM>
   </LINE>
</XML>
michael.hor257k
  • 113,275
  • 6
  • 33
  • 51
  • Thanks Michael, I will look into this solution and see if it fits my needs :) The actual data looks even worse:
    ^GLOBAL PAGELBL Page ^GLOBAL ADRES Aliplast Sp. z o.o. 20-276 Lublin ^GLOBAL INROLBILBL INROLBON BICOLORS ^GLOBAL INROL 38043 ^GLOBAL WORKCENTERLBL Workcenter
    – grmbl Mar 30 '14 at 19:24
  • Michael, it's not working. See http://pastebin.com/HYsqK0bY for the data. And if I run it through http://xslttest.appspot.com/ the result is fragmented and breaks too early + missing elements. :( – grmbl Mar 30 '14 at 19:37
  • @grmbl I have corrected a mistake in handling multiple `` elements. Would have caught it sooner if your input example had actual data for the second occurrence.. – michael.hor257k Mar 30 '14 at 20:11
  • :) take your time, Michael. I need to go offline but will check tomorrow morning. Thanks again! – grmbl Mar 30 '14 at 20:17
  • Thanks Michael, this works perfectly. Can you explain a bit and what steps should I take if I would like to add other fields as groups? Say I wanted to have a group created by FIELD_SORN, disregarding subgroup ITEM. (And what do I have to take in account if I want more nesting?) Thanks again for your precious time! – grmbl Mar 31 '14 at 06:10
  • 1
    @grmbl "*what steps should I take if I would like to add other fields as groups?*" If it were me, I would take a step towards the nearest wall and start banging my head against it... More seriously, your question is not quite clear, namely the "disregarding subgroup ITEM" part. Re more nesting, you can see the basic principle in the stylesheet above: items are grouped by the id of the "leading field". However, that is not enough when you also have "free-floating" items, so you need to add either the id of the leading field/s higher in the hierarchy or their count to get the correct grouping. – michael.hor257k Mar 31 '14 at 09:47
  • Hi Michael, I lol'ed. Thank you for having the patience to look for a solution. Because your solution works and fits the XLST 1.0 need I will happily accept this as answer. Though I fear (I've come to this conclusion now) that I might still have to write my own parser using XElement (linq XML) but I'll see... Data comes from AS400 ERP prepped for Adobe Jetform (dinosaur ancient layout software) – grmbl Mar 31 '14 at 18:33
0

Please follow below steps

XSLT file is used for transforming data from one file to another

1)First you will have to create "XSLT" file by selecting New|File|XSLT

2)Map XML elements with XSLT..

3)Run xslt by clicking "Start XSLT Debugging".....you will get your data in your custom format.

I already have created xslt code for you.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="XML">
      <XML>
        <GLOBAL_FIELD1>
          <xsl:value-of select="GLOBAL_FIELD1" />
        </GLOBAL_FIELD1>
        <GLOBAL_FIELD2>
          <xsl:value-of select="GLOBAL_FIELD2" />
        </GLOBAL_FIELD2>
        <GLOBAL_FIELD3>
          <xsl:value-of select="GLOBAL_FIELD3" />
        </GLOBAL_FIELD3>
        <ITEM>
          <FIELD_ITEM1>
            <xsl:value-of select="FIELD_ITEM1" />
          </FIELD_ITEM1>
          <FIELD_ITEM2>
            <xsl:value-of select="FIELD_ITEM2" />
          </FIELD_ITEM2>
          <FIELD_ITEM3>
            <xsl:value-of select="FIELD_ITEM3" />
          </FIELD_ITEM3>
          <DETAIL>
            <FIELD_DETAIL1>
              <xsl:value-of select="FIELD_DETAIL1" />
            </FIELD_DETAIL1>
            <FIELD_DETAIL2>
              <xsl:value-of select="FIELD_DETAIL2" />
            </FIELD_DETAIL2>
          </DETAIL>
        </ITEM>
        <ITEM>
          <FIELD_ITEM1>ITEM1</FIELD_ITEM1>
        </ITEM>
      </XML>
    </xsl:template>
</xsl:stylesheet>
Karna
  • 47
  • 3
  • Hi DanD, thanks for your answer but it appears that the fields are fixed? What I want is to genereate groups based on a tag name. So whenever FIELD_ITEM1 comes it would generate a group and when it finds FIELD_DETAIL1 it should create another subgroup in but the tag names should match automatically. It's actually a jumping algorith I need.. – grmbl Mar 28 '14 at 12:44
  • Something else, is there some kind of software I can do this wysiwyg? – grmbl Mar 28 '14 at 12:45
  • Can you please paste exact name of elements/attribute of your XML file? I will get better idea – Karna Mar 28 '14 at 12:53
  • DanD, I answered with the real example. – grmbl Mar 28 '14 at 13:02
  • The use of an [Identity template](http://www.xmlplease.com/xsltidentity) would be easier here. In combination with . – Mark Veenstra Mar 28 '14 at 13:39
  • Yes..Mark is right..you can first match main template then looping through each child elements and use too – Karna Mar 28 '14 at 13:49