Skip to content

Instantly share code, notes, and snippets.

@designermonkey
Forked from anonymous/master.xml
Created February 18, 2013 12:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save designermonkey/4977072 to your computer and use it in GitHub Desktop.
Save designermonkey/4977072 to your computer and use it in GitHub Desktop.
<data>
<products>
<entry>one</entry>
<entry>two</entry>
<entry>three</entry>
<entry>four</entry>
<entry>five</entry>
<entry>six</entry>
<entry>seven</entry>
<entry>eight</entry>
<entry>nine</entry>
<entry>ten</entry>
<entry>eleven</entry>
<entry>twelve</entry>
<entry>one</entry>
<entry>two</entry>
<entry>three</entry>
<entry>four</entry>
<entry>five</entry>
<entry>six</entry>
<entry>seven</entry>
<entry>eight</entry>
<entry>nine</entry>
<entry>ten</entry>
<entry>eleven</entry>
<entry>twelve</entry>
<entry>one</entry>
<entry>two</entry>
<entry>three</entry>
<entry>four</entry>
<entry>five</entry>
<entry>six</entry>
<entry>seven</entry>
<entry>eight</entry>
<entry>nine</entry>
<entry>ten</entry>
<entry>eleven</entry>
<entry>twelve</entry>
<entry>one</entry>
<entry>two</entry>
<entry>three</entry>
<entry>four</entry>
<entry>five</entry>
<entry>six</entry>
<entry>seven</entry>
<entry>eight</entry>
<entry>nine</entry>
<entry>ten</entry>
<entry>eleven</entry>
<entry>twelve</entry>
</products>
</data>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<section>
<xsl:apply-templates select="data/products/entry[position() mod 4 = 1]" mode="group" />
</section>
</xsl:template>
<xsl:template match="products/entry" mode="group">
<xsl:variable name="group">
<xsl:call-template name="num-to-word">
<xsl:with-param name="num" select="position()"/>
</xsl:call-template>
</xsl:variable>
<div class="group {$group}">
<xsl:apply-templates select=". | following-sibling::entry[position() &lt; 4]" mode="product"/>
</div>
</xsl:template>
<xsl:template match="products/entry" mode="product">
<article class="product">
<xsl:value-of select="./text()"/>
</article>
</xsl:template>
<xsl:template name="num-to-word">
<xsl:param name="num"/>
<xsl:choose>
<xsl:when test="$num mod 4 = 1">one</xsl:when>
<xsl:when test="$num mod 4 = 2">two</xsl:when>
<xsl:when test="$num mod 4 = 3">three</xsl:when>
<xsl:when test="$num mod 4 = 0">four</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment