Hi Nick,
Tempore 19:11:02, die 08/10/2005 AD, hinc in
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com scripsit Nick Fitzsimons
<nick(_at_)nickfitz(_dot_)co(_dot_)uk>:
What I require is the following:
<div>
<p>first</p>
<p>second</p>
</div>
<div>
<p>third</p>
<p>last</p>
</div>
Any suggestions as to how I can achieve the desired output would be
appreciated.
I've often come across this problem and I was always inclined to believe there
was no solution to it. But now I seem to have found a working solution.
However, as I was typing this stylesheet out, I had the faint feeling that I
later on would regret having posted it...
here's the xsl:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="xID" match="article" use="generate-id()"/>
<xsl:variable name="groupSize" select="2"/>
<xsl:template match="articles">
<xsl:call-template name="group">
<xsl:with-param name="idList">
<xsl:for-each select="article">
<xsl:sort select="@priority" data-type="number" order="descending"
/>
<xsl:value-of select="generate-id()"/>
<xsl:text>-</xsl:text>
<xsl:if test="position() mod $groupSize=0 or position()=last()">
<xsl:text>|</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="group">
<xsl:param name="idList"/>
<xsl:variable name="PartIdlist" select="substring-before($idList,'|')"/>
<xsl:if test="$PartIdlist">
<div>
<xsl:call-template name="animate">
<xsl:with-param name="idList" select="$PartIdlist"/>
</xsl:call-template>
</div>
<xsl:call-template name="group">
<xsl:with-param name="idList"
select="substring-after($idList,'|')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="animate">
<xsl:param name="idList"/>
<xsl:variable name="id" select="substring-before($idList,'-')"/>
<xsl:if test="$id">
<xsl:apply-templates select="key('xID',$id)"/>
<xsl:call-template name="animate">
<xsl:with-param name="idList"
select="substring-after($idList,'-')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="article">
<p><xsl:value-of select="title" /><xsl:value-of select="@priority" /></p>
</xsl:template>
</xsl:stylesheet>
regards,
--
Joris Gillis (http://users.telenet.be/root-jg/me.html)
Vincit omnia simplicitas
Keep it simple
--~------------------------------------------------------------------
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>
--~--