Re: [xsl] Enumerating template matches

Subject: Re: [xsl] Enumerating template matches
From: Morten <morten@xxxxxxx>
Date: Fri, 01 Feb 2002 16:11:33 +0100
Michael Kay wrote:

<xsl:template match="B">
 <xsl:apply-templates select="C">
   <xsl:with-param name="match_number" select="position()"/>
 </xsl:apply-templates>
</xsl:template>

<xsl:template match="C">
 <xsl:param name="match_number"/>
 <xsl:value-of select="$match_number"/>
</xsl:template>


This one did not work, only outputs 0's.



I think that's a bug: position() should never by zero. Which processor?

Mm.. Xalan-2.2.14. But wouldn't you suspect it to be the parameter passing rather than position() as it works when I use call-template rather than apply-templates?

[troi]~>more demo.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<mailboxes>
  <mailbox user="userA">
    <mail><subject>SubA</subject></mail>
  </mailbox>
  <mailbox user="userB">
    <mail><subject>SubB1</subject></mail>
    <mail><subject>SubB2</subject></mail>
  </mailbox>
  <mailbox user="userC">
    <mail><subject>SubC1</subject></mail>
    <mail><subject>SubC2</subject></mail>
  </mailbox>
</mailboxes>

[troi]~>more demo.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
<xsl:output encoding="iso-8859-1"/>


<xsl:template match="mailboxes">
  <xsl:apply-templates select="mailbox"/>
</xsl:template>

<xsl:template match="mailbox">
  <xsl:apply-templates select="mail">
    <xsl:with-param name="match_number" select="position()"/>
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="mail">
  <xsl:param name="match_number"/>
  A <xsl:value-of select="$match_number"/>
</xsl:template>

</xsl:stylesheet>

[troi]~>java org.apache.xalan.xslt.Process -IN demo.xml -XSL demo.xsl -TEXT

  A 0
  A 0
  A 0
  A 0
  A 0

With call-template:

[troi]~>more demo2.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
<xsl:output encoding="iso-8859-1"/>


<xsl:template match="mailboxes">
  <xsl:apply-templates select="mailbox"/>
</xsl:template>

<xsl:template match="mailbox">
  <xsl:call-template name="mail">
    <xsl:with-param name="match_number" select="position()"/>
  </xsl:call-template>
</xsl:template>

<xsl:template match="mail" name="mail">
  <xsl:param name="match_number"/>
  A <xsl:value-of select="$match_number"/>
</xsl:template>
</xsl:stylesheet>

[troi]~>java org.apache.xalan.xslt.Process -IN demo.xml -XSL demo2.xsl -TEXT

  A 1
  A 2
  A 3

Morten







XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list


Current Thread