[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Re: transform html h1 with a div


Subject: Re: [xsl] Re: transform html h1 with a div
From: David Carlisle <davidc@xxxxxxxxx>
Date: Wed, 31 Oct 2012 20:42:33 +0000

something like the following seems to do what you want:

<xsl:stylesheet version="2.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes"/>

<xsl:template match="x" name="x">
<xsl:param name="level" select="2"/>
<xsl:param name="content" select="*"/>
<xsl:for-each-group select="$content" group-starting-with="*[name()=concat('h',$level)]">
<xsl:choose>
<xsl:when test="$level>6">
<xsl:copy-of select="$content"/>
</xsl:when>
<xsl:when test="name()=concat('h',$level)">
<div class="{name()}">
<xsl:call-template name="x">
<xsl:with-param name="level" select="$level+1"/>
<xsl:with-param name="content" select="current-group()"/>
</xsl:call-template>
</div>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="x">
<xsl:with-param name="level" select="$level+1"/>
<xsl:with-param name="content" select="current-group()"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>


</xsl:stylesheet>




$ saxon9 h.xml h.xsl <?xml version="1.0" encoding="UTF-8"?> <div class="h3"> <h3>Title 3</h3> <p>bla bla bla</p> <p>bla bla bla</p> </div> <div class="h2"> <h2>Title 2</h2> <p>bla bla bla</p> <p>bla bla bla</p> <div class="h3"> <h3>Title 3</h3> <p>bla bla bla</p> <p>bla bla bla</p> <div class="h4"> <h4>Title 4</h4> <p>bla bla bla</p> <p>bla bla bla</p> </div> </div> </div>


Current Thread