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[(_at_)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>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--