I am new to XSLT and I am working on a tricky xml transformation requirement. My source xml is as mentioned below.
<Level_0>
<Level_1>
<Level_2>
<Level_3>hello</Level_3>
<Level_4>
<Header>
<Value>SomeValue</Value>
</Header>
<SalesInvoice>
<Item>
<Detail>
<Position>1</Position>
</Detail>
</Item>
</SalesInvoice>
<SalesInvoice>
<Item>
<Detail>
<Position>2</Position>
</Detail>
</Item>
</SalesInvoice>
<SalesInvoice>
<Item>
<Detail>
<Position>3</Position>
</Detail>
</Item>
</SalesInvoice>
</Level_4>
</Level_2>
</Level_1>
</Level_0>
Requirement - I need to have each item having its parents up to the level_1, means output should be as mentioned below. Basically, everything should be repeated for each Item from level_1.
<Level_0>
<Level_1>
<Level_2>
<Level_3>hello</Level_3>
<Level_4>
<Header>
<Value>SomeValue</Value>
</Header>
<SalesInvoice>
<Item>
<Detail>
<Position>1</Position>
</Detail>
</Item>
</SalesInvoice>
</Level_4>
</Level_2>
</Level_1>
<Level_1>
<Level_2>
<Level_3>hello</Level_3>
<Level_4>
<Header>
<Value>SomeValue</Value>
</Header>
<SalesInvoice>
<Item>
<Detail>
<Position>2</Position>
</Detail>
</Item>
</SalesInvoice>
</Level_4>
</Level_2>
</Level_1>
<Level_1>
<Level_2>
<Level_3>hello</Level_3>
<Level_4>
<Header>
<Value>SomeValue</Value>
</Header>
<SalesInvoice>
<Item>
<Detail>
<Position>3</Position>
</Detail>
</Item>
</SalesInvoice>
</Level_4>
</Level_2>
</Level_1>
</Level_0>
XSLT I tried. But I am getting weird output.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:template match="SalesInvoice">
<NewInvoice>
<xsl:copy-of select="../../../../Level_1/descendant::*[not(name()='SalesInvoice' or ancestor::SalesInvoice)]"/>
<xsl:copy-of select="."/>
</NewInvoice>
</xsl:template>
</xsl:stylesheet>