Advertisement
Guest User

XSLT iterator

a guest
Oct 21st, 2012
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
XML 1.88 KB | None | 0 0
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0"
  3.     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4.    xmlns:exsl="http://exslt.org/common"
  5.    extension-element-prefixes="exsl">
  6.  
  7. <xsl:template name="iterator">
  8.     <xsl:param name="start" select="'1'"/>
  9.     <xsl:param name="iterations" select="$iterations"/>
  10.     <xsl:param name="direction" select="'+'"/>
  11.     <xsl:param name="callback"/>
  12.     <xsl:param name="callback-params"/>
  13.  
  14.     <xsl:param name="count" select="$iterations"/>
  15.  
  16.     <xsl:if test="$callback and $count > 0">
  17.  
  18.         <xsl:variable name="position">
  19.             <xsl:choose>
  20.                 <xsl:when test="$direction='-'"><xsl:value-of select="$start - ($iterations - $count)"/></xsl:when>
  21.                 <xsl:otherwise><xsl:value-of select="$start + ($iterations - $count)"/></xsl:otherwise>
  22.             </xsl:choose>
  23.         </xsl:variable>
  24.  
  25.         <xsl:variable name="callback-node">
  26.             <xsl:element name="{$callback}">
  27.                 <xsl:if test="$callback-params">
  28.                     <xsl:copy-of select="$callback-params"/>
  29.                 </xsl:if>
  30.             </xsl:element>
  31.         </xsl:variable>
  32.  
  33.         <xsl:apply-templates select="exsl:node-set($callback-node)" mode="iterator-callback">
  34.             <xsl:with-param name="position" select="$position"/>
  35.         </xsl:apply-templates>
  36.  
  37.         <xsl:call-template name="iterator">
  38.             <xsl:with-param name="start" select="$start"/>
  39.             <xsl:with-param name="iterations" select="$iterations"/>
  40.             <xsl:with-param name="direction" select="$direction"/>
  41.             <xsl:with-param name="callback" select="$callback"/>
  42.             <xsl:with-param name="callback-params" select="$callback-params"/>
  43.             <xsl:with-param name="count" select="$count - 1"/>
  44.         </xsl:call-template>
  45.  
  46.     </xsl:if>
  47.  
  48. </xsl:template>
  49.  
  50. </xsl:stylesheet>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement