This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

"position in source tree" vs. "context position"


I'm trying to figure out the difference. The reason I ask: I understand why
this template rule

  <xsl:template match="li">
    <xsl:number value="position()" format="1. "/>
    <xsl:apply-templates/>
  </xsl:template>

turns this document

  <litest>
    <li>first item</li>
    <li>second item</li>
    <li>third item</li>
  </litest>

into this:

  2. first item
  4. second item
  6. third item

They're even numbers because the odd-numbered positions are held by the text
nodes with the carriage returns after each li element. On the other hand,
this template rule

  <xsl:template match="li">
    <xsl:number format="1. "/>
    <xsl:apply-templates/>
  </xsl:template>

turns the same input into this:

  1. first item
  2. second item
  3. third item

According to 7.7 of the XSLT Rec, which covers xsl:number, "If no value
attribute is specified, then the xsl:number element inserts a number based
on the position of the current node in the source tree." According to 4.1 of
the XPath Rec, position() "returns a number equal to the context position
from the expression evaluation context." Why are text nodes counted for the
context position but not for the position in the source tree?
 
Bob DuCharme          www.snee.com/bob           <bob@  
snee.com>  "The elements be kind to thee, and make thy
spirits all of comfort!" Anthony and Cleopatra, III ii


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]