This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: removing nesting in data structure
- From: Mike Brown <mike at skew dot org>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Mon, 20 May 2002 13:51:39 -0600 (MDT)
- Subject: Re: [xsl] removing nesting in data structure
- Reply-to: xsl-list at lists dot mulberrytech dot com
Andrew Welch wrote:
> <?xml version="1.0"?>
> <root>
> <para0>
> <para>para 0</para>
> <subpara1>
> <para>subpara 1</para>
> <subpara2>
> <para>subpara 2</para>
> <subpara3>
> <para>subpara 3</para>
> </subpara3>
> </subpara2>
> </subpara1>
> </para0>
> </root>
>
> Each subpara is a child of the preceding subpara, up to para0 which is
> the top level. The nested element will always be the last child of the
> parent. Now the structure I would like is more flat, like this:
>
> <root>
> <para0>
> <para>para 0</para>
> </para0>
> <subpara1>
> <para>subpara1</para>
> </subpara1>
> <subpara2>
> <para>subpara2</para>
> </subpara2>
> ...and so on
> </root>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="para0|*[starts-with(local-name(),'subpara')]">
<xsl:copy>
<xsl:copy-of select="para"/>
</xsl:copy>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="para|text()"/>
</xsl:stylesheet>
Alternatively, you can ditch the last template and replace the
<xsl:apply-templates/> in the 2nd template with
<xsl:apply-templates select="*[starts-with(local-name(),'subpara')]"/>
- Mike
____________________________________________________________________________
mike j. brown | xml/xslt: http://skew.org/xml/
denver/boulder, colorado, usa | resume: http://skew.org/~mike/resume/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list