'Splitting xml document based on a child node
I want to split an xml document using an XSLT (version 2.0/3.0 supported), based on a child node. in the example provided below, it should be based on Item node.
Basically, when we split, the Item node will carry all the ancestors above it, but not the root element.
<Root>
<List>
<Header>
<test1>a</test1>
</Header>
<Order>
<Item>
<ItemNumber>
<Number>1</Number>
</ItemNumber>
</Item>
</Order>
<Order>
<Item>
<ItemNumber>
<Number>2</Number>
</ItemNumber>
</Item>
</Order>
<Order>
<Item>
<ItemNumber>
<Number>3</Number>
</ItemNumber>
</Item>
</Order>
<Order>
<Item>
<ItemNumber>
<Number>4</Number>
</ItemNumber>
</Item>
</Order>
<Order>
<Item>
<ItemNumber>
<Number>5</Number>
</ItemNumber>
</Item>
</Order>
</List>
</Root>
Output Required is -
<Root>
<List>
<Header>
<test1>a</test1>
</Header>
<Order>
<Item>
<ItemNumber>
<Number>1</Number>
</ItemNumber>
</Item>
</Order>
</List>
<List>
<Header>
<test1>a</test1>
</Header>
<Order>
<Item>
<ItemNumber>
<Number>2</Number>
</ItemNumber>
</Item>
</Order>
</List>
<List>
<Header>
<test1>a</test1>
</Header>
<Order>
<Item>
<ItemNumber>
<Number>3</Number>
</ItemNumber>
</Item>
</Order>
</List>
<List>
<Header>
<test1>a</test1>
</Header>
<Order>
<Item>
<ItemNumber>
<Number>4</Number>
</ItemNumber>
</Item>
</Order>
</List>
<List>
<Header>
<test1>a</test1>
</Header>
<Order>
<Item>
<ItemNumber>
<Number>5</Number>
</ItemNumber>
</Item>
</Order>
</List>
</Root>
The XSLT, I have tried is as mentioned below, I am getting same number of Items in the output (all the Items are getting repeated, instead of the desried one)
<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:template match="/Root">
<xsl:copy>
<xsl:for-each select="List/Order/Item">
<xsl:copy-of select=" ancestor-or-self::List | Order"/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
