Subject: Re: [xsl] Position() vs counter variable From: Brian Chrisman <incubus@xxxxxxxxxxxxxx> Date: Mon, 4 Apr 2005 12:18:21 -0700 |
On Mon, Apr 04, 2005 at 03:07:53PM -0400, Maria Amuchastegui wrote: > My data contains a series of tables that I need to number consecutively, > i.e. 1, 2, 3. I want to do this using the position() property. However, > because the position is relative to the parent node, the numbering is > restarting whenever there is a new parent node, so I get: 1, 2, 1. Is there > a way to do this using position(), or do I have to set up a counter > variable? position() isn't really 'relative to the parent node'. It's relative to the list of nodes selected by a particular select="" attribute. Here you have a for-each selecting the Section elements of a particular type. The position() will tell you what the order is among those selected Section elements. What you are probably looking for is something like count(preceding-sibling::Section) instead of position() to get the number of Section elements occuring prior to the current node.. > > Here is the XSL: > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform > <http://www.w3.org/1999/XSL/Transform> " > xmlns:fo="http://www.w3.org/1999/XSL/Format > <http://www.w3.org/1999/XSL/Format> "> > <xsl:output method="html"/> > <xsl:template match="/"> > <html> > <body> > <xsl:apply-templates select="myXMLData"/> > </body> > </html> > </xsl:template> > <xsl:template match="myXMLData"> > <xsl:apply-templates select="//BTN"/> > </xsl:template> > <xsl:template match="//BTN"> > <b><xsl:value-of select="@number"/></b> > <xsl:for-each select="Section[@type='Detail']"> > <table border="1"> > <th colspan="6" align="left"> > This is table <xsl:value-of select="position()"/>. > </th> > <tr> > <th>ID </th> > <th>Date </th> > <th>Location </th> > <th>Number </th> > <th>Duration</th> > <th>Charges </th> > </tr> > <xsl:apply-templates select="ServiceHeader"/> > </table> > <br/> > </xsl:for-each> > </xsl:template> > <xsl:template match="ServiceHeader"> > <xsl:if test="@group != '' "> > <tr> > <td colspan="6"><xsl:value-of select="@group"/></td> > </tr> > </xsl:if> > <xsl:apply-templates select="message"/> > </xsl:template> > <xsl:template match="message"> > <tr> > <td><xsl:value-of select="id"/></td> > <td><xsl:value-of select="date"/></td> > <td><xsl:value-of select="location"/></td> > <td><xsl:value-of select="number"/></td> > <td><xsl:value-of select="duration"/></td> > <td><xsl:value-of select="charges"/></td> > </tr> > </xsl:template> > </xsl:stylesheet> > > > And here is the XML: > > <?xml version="1.0" encoding="UTF-8"?> > <myXMLData xmlns=""> > <BTN number="635 5669"> > <Section number="400" type="Detail" subHead1="Long distance calls" > subHead2=""> > <ServiceHeader group=""> > <message> > <id>1-01</id> > <date>2005-04-23</date> > <location>Quebec QC</location> > <number>418 683 1234</number> > <duration>1</duration> > <charges>0.43</charges> > <savings>.043</savings> > <amount/> > </message> > <message> > <id>1-02</id> > <date>2005-04-28</date> > <location>Montreal QC</location> > <number>514 485 6611</number> > <duration>2</duration> > <charges>3.44</charges> > <savings/> > <amount/> > </message> > </ServiceHeader> > </Section> > <Section number="420" type="Summary"/> > <Section number="430c" type="Detail" subHead1="Advantage Per Call" > subHead2=""> > <ServiceHeader group="Canada"> > <message> > <id>1-06</id> > <date>2005-05-06</date> > <location>Collingwood ON</location> > <number>705 445 1030</number> > <duration>1.4</duration> > <charges>5.01</charges> > <savings/> > <amount/> > </message> > <message> > <id>1-07</id> > <date>2005-04-12</date> > <location>Erin ON</location> > <number>519 833 2380</number> > <duration>1.1</duration> > <charges>0.78</charges> > <savings/> > <amount/> > </message> > </ServiceHeader> > </Section> > <Section number="450c" type="Summary" subHead1="" subHead2=""/> > </BTN> > <BTN number="635 5670"> > <Section number="400" type="Detail" subHead1="Long distance calls" > subHead2=""> > <ServiceHeader group=""> > <message> > <id>1-12</id> > <date>2005-04-08</date> > <location>Edmonton AB</location> > <number>780 496 8200</number> > <duration>3</duration> > <charges>0.25</charges> > <savings/> > <amount/> > </message> > <message> > <id>1-13</id> > <date>2005-04-15</date> > <location>Halifax NS</location> > <number>902 490 6277</number> > <duration>5</duration> > <charges>1.01</charges> > <savings/> > <amount/> > </message> > </ServiceHeader> > </Section> > <Section number="420" type="Summary"/> > </BTN> > </myXMLData>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Position() vs counter variabl, Maria Amuchastegui | Thread | Re: [xsl] Position() vs counter var, António Mota |
[xsl] Position() vs counter variabl, Maria Amuchastegui | Date | Re: [xsl] Position() vs counter var, António Mota |
Month |