Altova Mailing List Archives>Archive Index >xsl-list Archive Home >Recent entries >Thread Prev - [xsl] Removing hierarchy [Thread Next] Re: [xsl] Removing hierarchyTo: xsl-list@-----.------------.--- Date: 10/1/2009 11:51:00 AM rowan@s... wrote: > I've got an input file like this: > <items> > <item> > <a>abc</a> > <b>def</b> > <item> > <a>ghi</a> > <b>jkl</b> > </item> > <item> > <a>mno</a> > <b>pqr</b> > <item> > <a>stu</a> > <b>vwx</b> > </item> > </item> > </item > </items > > The items can be nested to any depth. > > I want to convert this to: > > <items> > <item> > <level>0</level> > <a>abc</a> > <b>def</b> > </item > <item> > <level>1</level> > <a>ghi</a> > <b>jkl</b> > </item> > <item> > <level>1</level> > <a>mno</a> > <b>pqr</b> > </item > <item> > <level>2</level> > <a>stu</a> > <b>vwx</b> > </item> > </items > > In other words I want to remove the hierarchy of items and replace it with > a 'level' element. > > What's the best way of doing this? Here is an XSLT 1.0 way: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes"/> <xsl:template match="items"> <xsl:copy> <xsl:apply-templates select="descendant::item"/> </xsl:copy> </xsl:template> <xsl:template match="item"> <xsl:copy> <level><xsl:value-of select="count(ancestor::item)"/></level> <xsl:copy-of select="*[not(self::item)]"/> </xsl:copy> </xsl:template> </xsl:stylesheet> -- Martin Honnen http://msmvps.com/blogs/martin_honnen/ --~------------------------------------------------------------------ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/ or e-mail: <mailto:xsl-list-unsubscribe@l...> --~-- | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
