|
Subject: Re: [xsl] Need to Split/Un-Nest elements From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Thu, 12 Jun 2008 10:26:04 +0100 |
2008/6/12 Mandar Jagtap <mandar.jagtap@xxxxxxxxx>:
> Hi,
>
> I want to split/un-nest the elements in xml like below:
>
> Input xml:
>
> <region>
> <page>
> <block>Text1.....</block>
> <block>
> <inline>Text2.....</inline>
> <page>
> <block>Text3.....</block>
> </page>
> <inline>Text4......</inline>
> </block>
> </page>
> <page>
> <block>Text5.....</block>
> </page>
> </region>
>
> Desired Output:
>
> <region>
> <page>
> <block>Text1.....</block>
> <block>
> <inline>Text2.....</inline>
> </block>
> </page>
> <page>
> <block>Text3.....</block>
> </page>
> <page>
> <block>
> <inline>Text4......</inline>
> </block>
> </page>
> <page>
> <block>Text5.....</block>
> </page>
>
> </region>
>
> Can anyone help me on this?
You need the "modified identity" or "sibling recursion" technique to
allow you stop processing as you come across a <page> element:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()[1]"/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::node()[1]"/>
</xsl:template>
<xsl:template match="@*">
<xsl:copy/>
</xsl:template>
<xsl:template match="/region">
<xsl:copy>
<xsl:apply-templates
select="//page|//*[preceding-sibling::*[1][self::page]]" mode="copy"/>
</xsl:copy>
</xsl:template>
<xsl:template match="page" mode="copy">
<xsl:copy>
<xsl:apply-templates select="node()[1]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="inline" mode="copy">
<page>
<block>
<xsl:apply-templates select="."/>
</block>
</page>
</xsl:template>
<xsl:template match="page"/>
</xsl:stylesheet>
Sorry I don't have time to explain it...
--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Need to Split/Un-Nest element, Mandar Jagtap | Thread | RE: [xsl] Need to Split/Un-Nest ele, mandar.jagtap |
| [xsl] XSLT 2 - Sorting data with tw, Chris Hughes | Date | Re: [xsl] XSLT 2 - Sorting data wit, Andrew Welch |
| Month |