I have the following input XML:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<row>
<code>EXCLUDE</code>
<value>VALUE1</value>
</row>
<row>
<code>EXCLUDEALSO</code>
<value>VALUE2</value>
</row>
<row>
<code>NUMBER</code>
<value>001</value>
</row>
<row>
<code>FROM</code>
<value>NAMELINE_FROM</value>
</row>
<row>
<code>TO</code>
<value>NAMELINE_TO</value>
</row>
<row>
<code>NUMBER</code>
<value>002</value>
</row>
<row>
<code>TO</code>
<value>NAMELINE_TO</value>
</row>
<row>
<code>NUMBER</code>
<value>003</value>
</row>
<row>
<code>FROM</code>
<value>NAMELINE_FROM</value>
</row>
<row>
<code>NUMBER</code>
<value>004</value>
</row>
<row>
<code>TO</code>
<value>NAMELINE</value>
</row>
<row>
<code>FROM</code>
<value>NAMELINE</value>
</row>
<row>
<code>EXCLUDE</code>
<value>VALUE1</value>
</row>
<row>
<code>EXCLUDEALSO</code>
<value>VALUE2</value>
</row>
</data>
And it needs to be transformed to the following XML:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<row>
<code>EXCLUDE</code>
<value>VALUE1</value>
</row>
<row>
<code>EXCLUDEALSO</code>
<value>VALUE2</value>
</row>
<group>
<row>
<code>NUMBER</code>
<value>001</value>
</row>
<row>
<code>FROM</code>
<value>NAMELINE_FROM</value>
</row>
<row>
<code>TO</code>
<value>NAMELINE_TO</value>
</row>
</group>
<group>
<row>
<code>NUMBER</code>
<value>002</value>
</row>
<row>
<code>TO</code>
<value>NAMELINE_TO</value>
</row>
</group>
<group>
<row>
<code>NUMBER</code>
<value>003</value>
</row>
<row>
<code>FROM</code>
<value>NAMELINE_FROM</value>
</row>
</group>
<group>
<row>
<code>NUMBER</code>
<value>004</value>
</row>
<row>
<code>TO</code>
<value>NAMELINE</value>
</row>
<row>
<code>FROM</code>
<value>NAMELINE</value>
</row>
</group>
<row>
<code>EXCLUDE</code>
<value>VALUE1</value>
</row>
<row>
<code>EXCLUDEALSO</code>
<value>VALUE2</value>
</row>
</data>
The rules to be applied:
- Some rows needs to be excluded from the grouping. These would be the rows that do not have the code
NUMBER
,FROM
orTO
. - When code
NUMBER
appears a new group starts FROM
andTO
could be in different order- Rows that have to be exclude will always be in front and/or at the end of the to be grouped codes. It will never appear in between.
In XSLT 2.0 this would be easy and I have the solution, but in XSLT 1.0 I do not know where to start.