Re: [xsl] xsl:number value="id(@ref)" ?

Subject: Re: [xsl] xsl:number value="id(@ref)" ?
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Mon, 28 Oct 2002 17:35:19 -0500
Michael,

Your problem is simply that xsl:number works differently from what you expect: in particular, the 'value' attribute doesn't work this way.

It may seem to be a bit of a kluge, but unfortunately to get the correct number you want using xsl:number, you have to change the context node to the node that you want to count. This can be readily done with a new template:

 <xsl:template match="//see">
    'see' finds destination '<xsl:value-of select="id(@ref)"/>',
    whose position is: <xsl:apply-templates select="id(@ref)" mode="number"/>.
  </xsl:template>

 <xsl:template match="*" mode="number">
    <xsl:number/>
 </xsl:template>

If you're too lazy to make a new template, you could put the whole thing in a for-each.

Another alternative would be to skip the xsl:number altogether and use a simple count, as in:

<xsl:template match="//see">
'see' finds destination '<xsl:value-of select="id(@ref)"/>',
whose position is: <xsl:value-of select="count(id(@ref)/preceding-sibling::*)+1"/>.
</xsl:template>


Of course this will only work if you want the simplest of numbering schemes.

Cheers,
Wendell

At 04:52 PM 10/28/2002, you wrote:
For generating links to numbered images in hypertext
I'm using ID referencing. Accessing the children of a
referenced node works fine with XT, but an xsl:number
element using the reference returns always zero. Is
something wrong with my code?

Here's an example:

-------SOURCE-------
<!DOCTYPE myroot [
  <!ELEMENT see (#PCDATA)>
  <!ELEMENT dest (#PCDATA)>
  <!ATTLIST see ref CDATA #REQUIRED>
  <!ATTLIST dest id ID #REQUIRED> ]>
<myroot>
  <see ref="D2"/>
  <dest id="D1">Node D1</dest>
  <dest id="D2">Node D2</dest>
  <dest id="D3">Node D3</dest>
</myroot>

------STYLESHEET------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version
="1.0">
  <xsl:template match="//see">
    'see' finds destination '<xsl:value-of select="id(@ref)"/>',
    whose position is: <xsl:number value="id(@ref)"/>.
  </xsl:template>
  <xsl:template match="text()"/>
</xsl:stylesheet>

--------RESULT--------
'see' finds destination 'Node D2',
whose position is: 0.


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


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



Current Thread