This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: file manipulation with recursion
- From: Dimitre Novatchev <dnovatchev at yahoo dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Tue, 23 Jul 2002 06:40:32 -0700 (PDT)
- Subject: [xsl] Re: file manipulation with recursion
- Reply-to: xsl-list at lists dot mulberrytech dot com
--- Holmberg Rick-ra0119 <Rick dot Holmberg at motorola dot com> wrote:
> Hi all,
> I am new to XML/XSLT and have a file that I need to generate a
> smaller version of. The file is of the format:
>
> <hierarchy>
> <category>
> <id>0</id>
> <level>-1</level>
> <name>Cat1</name>
> <releaseLevel>Live</releaseLevel>
> <date>2002-02-25 12:29:46</date>
> <category>
> <id>13abc</id>
> <level>1</level>
> <name>Cat2</name>
> <releaseLevel>Live</releaseLevel>
> <date>2002-01-07 14:02:41</date>
> <category>
> <id>X12345</id>
> <level>2</level>
> <name>Cat3</name>
> <releaseLevel>Live</releaseLevel>
> <date>2002-07-11 14:52:06</date>
> </category>
> </category>
> </category>
> </hierarchy>
>
> I need to have the output file be of the format
> <hierarchy>
> <category>
> <id>0</id>
> <name>Cat1</name>
> <category>
> <id>13abc</id>
> <name>Cat2</name>
> <category>
> <id>X12345</id>
> <name>Cat3</name>
> </category>
> </category>
> </category>
> </hierarchy>
Hi Rick,
The following transformation produces the desired results:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="category/*[not(self::id
or self::name
or self::category
)
]"/>
</xsl:stylesheet>
This is just the identity rule plus a rule to eliminate any children of
a "category", which are not "id" or "name" or "category" themselves.
And when applied to your source xml document, the result is exactly as
desired:
<hierarchy>
<category>
<id>0</id>
<name>Cat1</name>
<category>
<id>13abc</id>
<name>Cat2</name>
<category>
<id>X12345</id>
<name>Cat3</name>
</category>
</category>
</category>
</hierarchy>
Hope this helped.
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
__________________________________________________
Do You Yahoo!?
Yahoo! Health - Feel better, live better
http://health.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list