Subject: Re: [xsl] Position() vs counter variable From: António Mota <amsmota@xxxxxxxxx> Date: Mon, 4 Apr 2005 20:22:04 +0100 |
And of course, there are not such thing as a "counter variable"... On Apr 4, 2005 8:18 PM, Brian Chrisman <incubus@xxxxxxxxxxxxxx> wrote: > 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 -> |
---|---|---|
Re: [xsl] Position() vs counter var, Brian Chrisman | Thread | Re: [xsl] Position() vs counter var, JBryant |
Re: [xsl] Position() vs counter var, Brian Chrisman | Date | Re: [xsl] Position() vs counter var, JBryant |
Month |