rowan(_at_)sylvester-bradley(_dot_)org 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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--