I want to make a transformation that is able to nest a set of sibling elements depending on value of attribute (outline-level
).
This is the input xml file:
<text>
<para style="Heading 1" outline-level="1">Level 1</para>
<para xml:lang="en" style="Directive">Concept: 1</para>
<para xml:lang="en" style="Heading 2" outline-level="2">Level 2</para>
<para xml:lang="en" style="Directive">Concept: 2</para>
<para xml:lang="en" style="Heading 2" outline-level="2">Level 2</para>
<para xml:lang="en" style="Directive">Concept: 3</para>
<para xml:lang="en" style="Heading 3" outline-level="3">Level 3</para>
<para xml:lang="en" style="Directive">Concept: 4</para>
<para xml:lang="en" style="Heading 3" outline-level="3">Level 3</para>
<para xml:lang="en" style="Directive">Concept: 5</para>
<para xml:lang="en" style="Heading 1" outline-level="1">Level 1</para>
<para xml:lang="en" style="Directive">Concept: 6</para>
<para xml:lang="en" style="Heading 2" outline-level="2">Level 2</para>
<para xml:lang="en" style="Directive">Concept: 7</para>
<para xml:lang="en" style="Heading 3" outline-level="3">Level 3</para>
<para xml:lang="en" style="Directive">Concept: 8</para>
</text>
And this is what I want to acheive:
<root>
<para id="Concept: 1">Level 1
<para id="Concept: 2">Level 2</para>
<para id="Concept: 3">Level 2
<para id="Concept: 4">Level 3</para>
<para id="Concept: 5">Level 3</para>
</para>
</para>
<para id="Concept: 6">Level1
<para id="Concept: 7">Level 2
<para id="Concept: 8"/>
</para>
</para>
</root>
The nesting level have to be determined by the value of @outline-level
. The bigger is that number the deeper is the element nested.
Any ideas would be highly appreciated.