XSLT: SUM function how to
Here should go questions about transforming XML with XSLT and FOP.
-
- Posts: 3
- Joined: Fri Apr 03, 2009 11:41 am
XSLT: SUM function how to
Hi,
who can help me
i want to count the position of the td
xml:
xslt:
I need this output
TD1 TD2
10 10
20 1000
30 10
total 60 1020
who can help me

i want to count the position of the td
xml:
Code: Select all
<table>
<tbody>
<tr>
<td>10</td>
<td>10</td>
</tr>
<tr>
<td>20</td>
<td>1000</td>
</tr>
<tr>
<td>30</td>
<td>10</td>
</tr>
</tbody>
</table>
xslt:
Code: Select all
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="table">
<table border="1">
<tbody>
<xsl:for-each select="tbody/tr">
<tr>
<xsl:apply-templates select="th | td"/>
</tr>
</xsl:for-each>
<xsl:call-template name="columnTotal1"/>
</tbody>
</table>
</xsl:template>
<xsl:template match="th">
<th>
<xsl:value-of select="."/>
</th>
</xsl:template>
<xsl:template match="td">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template name="columnTotal1">
<tr>
<xsl:for-each select="//tr[1]/td">
<td style="bgcolor:orange">
<xsl:value-of select="sum(//tr/td[position])"/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
</xsl:stylesheet>
I need this output
TD1 TD2
10 10
20 1000
30 10
total 60 1020
-
- Posts: 14
- Joined: Tue Feb 10, 2009 1:50 pm
Re: XSLT: SUM function how to
Post by JohnBampton »
Code: Select all
<xsl:template name="columnTotal1">
<tr>
<xsl:for-each select="//tr[1]/td">
<xsl:variable name="position" select="position()"></xsl:variable>
<td style="bgcolor:orange">
<xsl:value-of select="sum(. + sum(following::tr/td[position() = $position]))"/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
-
- Posts: 3
- Joined: Fri Apr 03, 2009 11:41 am
Re: XSLT: SUM function how to
It works now in the right way only if there are blank cells, you get a NAN
xml:
xslt:
output:
10 10
20 1000 1000
30 10 10
NaN 1020 1020
xml:
Code: Select all
<table>
<tbody>
<tr>
<td></td>
<td>10</td>
<td>10</td>
</tr>
<tr>
<td>20</td>
<td>1000</td>
<td>1000</td>
</tr>
<tr>
<td>30</td>
<td>10</td>
<td>10</td>
</tr>
</tbody>
</table>
Code: Select all
<xsl:template name="columnTotal">
<tr>
<xsl:for-each select="//tr[1]/td">
<xsl:variable name="position" select="position()"/>
<td bgcolor="Orange">
<xsl:value-of select="sum(. + sum(following::tr/td[position() = $position]))"/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
Code: Select all
<table border="1">
<tbody>
<tr>
<td></td>
<td>10</td>
<td>10</td>
</tr>
<tr>
<td>20</td>
<td>1000</td>
<td>1000</td>
</tr>
<tr>
<td>30</td>
<td>10</td>
<td>10</td>
</tr>
<tr>
<td bgcolor="Orange">NaN</td>
<td bgcolor="Orange">1020</td>
<td bgcolor="Orange">1020</td>
</tr>
</tbody>
</table>
10 10
20 1000 1000
30 10 10
NaN 1020 1020
-
- Posts: 14
- Joined: Tue Feb 10, 2009 1:50 pm
Re: XSLT: SUM function how to
Post by JohnBampton »
Code: Select all
<xsl:template name="columnTotal1">
<tr>
<xsl:for-each select="//tr[1]/td">
<xsl:variable name="position" select="position()"></xsl:variable>
<td style="bgcolor:orange">
<xsl:value-of select="sum( (if(. = '') then 0 else .)
+ sum(following::tr/td[position() = $position]))"/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service