count in XSLT, Need Help Please !!!
Here should go questions about transforming XML with XSLT and FOP.
-
- Posts: 9
- Joined: Thu Dec 11, 2008 10:15 pm
count in XSLT, Need Help Please !!!
Hi,
I am creating a report using a xml (Input File(Source).
In the xml I have Parents Source , Then I have ID, S_ID, Name , Discription, DATE, TIME and STATUS , For Each ID I will be having 96 DATE and TIME, some time I may have 80 or 70 also , But max count will be 96.
I am getting all the column correct in the report, now I am trying to get a new column TOTAL COUNT ( which count all the Date / Time / Status, STATUS value will be "1" by default. If I sum the STATUS.
Below is the XSLT iam trying to right , but If I use count it is displaying 2796 in each, I didn't put the whole xml here I just added 4 - 5 count here as an example.
why I am getting 2796 ( becuase I pulled 1 month i data means 31 days each day will have 96 S_ID , DATE, TIME, STATUS) so the XSLT is count 96 * 31 and displaying 2796 in each row.
The ID is also unique for 96 Measure
MY XML :
<?xml version="1.0" encoding="UTF-8"?>
<envelope>
<sources>
<source>
<data>
<xml_transfer xmlns="" version="V1.2">
<REPORT>
<EM_ESOURCE>
<MEASURE>
<ID>1403157</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.446961</AMOUNT>
<DATE>2007-01-01</START_DATE>
<TIME>05:44:00</START_TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>BBB</NAME>
</MATERIAL_TEXT>
</MEASURE>
<MEASURE>
<ID>1403158</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.211704</AMOUNT>
<DATE>2007-01-01</DATE>
<TIME>05:59:00</TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>ABC</NAME>
</MATERIAL_TEXT>
</MEASURE>
<MEASURE>
<ID>1403159</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.432246</AMOUNT>
<DATE>2007-01-01</DATE>
<TIME>06:14:00</TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>JJJ</NAME>
</MATERIAL_TEXT>
</MEASURE>
<MEASURE>
<ID>1403160</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.805982</AMOUNT>
<DATE>2007-01-01</DATE>
<TIME>06:29:00</TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>KKK</NAME>
<MATERIAL_TEXT>
</MEASURE>
.***********<96 MEASURE> element*********
<MEASURE>
<ID>1403160</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.805982</AMOUNT>
<DATE>2007-01-02</DATE>
<TIME>06:29:00</TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>KKK</NAME>
<MATERIAL_TEXT>
</MEASURE>
*********************************
( 96 <MEASURE>)
**********
MY XSLT :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="text()|@*"/>
<xsl:key name="fact" match="MEASURE" use="concat(S_ID, ' ', DATE)"/>
<xsl:template match="//rep:envelope/rep:sources/rep:source/rep:data/xml_transfer/REPORT">
<HTML>
<!-- Headers -->
<table><tr><td align="left" colspan="7"><font size="5"><b><i><u>My Report</u></i></b></font></td></tr> <!-- Report title -->
<tr><td/></tr></table>
<table><tr><td/></tr></table>
<table border="1"> <!-- Headers -->
<tr>
<th colspan="7">Parent Facility</th>
<th>NAME</th>
<th>DESCRIPTION</th>
<th>TYPE</th>
<th>IDENTIFIER</th>
<th>PARAMETER</th>
<th>DATE</th>
<th>TOTAL COUNT</th>
</tr>
</table>
<xsl:for-each select="ESOURCE">
<table border="1"><tr>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last()]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 1]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 2]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 3]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 4]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 5]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 6]/NAME"/></td>
<td><xsl:value-of select="ESOURCE_TEXT/NAME"/></td>
<td><xsl:value-of select="ESOURCE_TEXT/DESCRIPTION"/></td>
<td><table><xsl:for-each select="MEASURE[count(. | key('fact', concat(S_ID, ' ', MAT_ID, ' ', DATE))[1]) = 1]">
<xsl:sort select="MATERIAL_TEXT/NAME"/>
<xsl:sort select="DATE"/>
<tr>
<td><xsl:value-of select="MATERIAL_TEXT/NAME"/></td>
<td><xsl:value-of select="START_DATE"/></td>
<td><xsl:value-of select="count(//STATUS[.=current()/STATUS])"/></td>
</tr>
</xsl:for-each></table></td>
</tr></table>
</xsl:for-each>
</HTML>
</xsl:template>
</xsl:stylesheet>
I am creating a report using a xml (Input File(Source).
In the xml I have Parents Source , Then I have ID, S_ID, Name , Discription, DATE, TIME and STATUS , For Each ID I will be having 96 DATE and TIME, some time I may have 80 or 70 also , But max count will be 96.
I am getting all the column correct in the report, now I am trying to get a new column TOTAL COUNT ( which count all the Date / Time / Status, STATUS value will be "1" by default. If I sum the STATUS.
Below is the XSLT iam trying to right , but If I use count it is displaying 2796 in each, I didn't put the whole xml here I just added 4 - 5 count here as an example.
why I am getting 2796 ( becuase I pulled 1 month i data means 31 days each day will have 96 S_ID , DATE, TIME, STATUS) so the XSLT is count 96 * 31 and displaying 2796 in each row.
The ID is also unique for 96 Measure
MY XML :
<?xml version="1.0" encoding="UTF-8"?>
<envelope>
<sources>
<source>
<data>
<xml_transfer xmlns="" version="V1.2">
<REPORT>
<EM_ESOURCE>
<MEASURE>
<ID>1403157</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.446961</AMOUNT>
<DATE>2007-01-01</START_DATE>
<TIME>05:44:00</START_TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>BBB</NAME>
</MATERIAL_TEXT>
</MEASURE>
<MEASURE>
<ID>1403158</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.211704</AMOUNT>
<DATE>2007-01-01</DATE>
<TIME>05:59:00</TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>ABC</NAME>
</MATERIAL_TEXT>
</MEASURE>
<MEASURE>
<ID>1403159</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.432246</AMOUNT>
<DATE>2007-01-01</DATE>
<TIME>06:14:00</TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>JJJ</NAME>
</MATERIAL_TEXT>
</MEASURE>
<MEASURE>
<ID>1403160</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.805982</AMOUNT>
<DATE>2007-01-01</DATE>
<TIME>06:29:00</TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>KKK</NAME>
<MATERIAL_TEXT>
</MEASURE>
.***********<96 MEASURE> element*********
<MEASURE>
<ID>1403160</ID>
<S_ID>1017502</S_ID>
<AMOUNT>13.805982</AMOUNT>
<DATE>2007-01-02</DATE>
<TIME>06:29:00</TIME>
<STATUS>1</STATUS>
<MATERIAL_TEXT>
<NAME>KKK</NAME>
<MATERIAL_TEXT>
</MEASURE>
*********************************
( 96 <MEASURE>)
**********
MY XSLT :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="text()|@*"/>
<xsl:key name="fact" match="MEASURE" use="concat(S_ID, ' ', DATE)"/>
<xsl:template match="//rep:envelope/rep:sources/rep:source/rep:data/xml_transfer/REPORT">
<HTML>
<!-- Headers -->
<table><tr><td align="left" colspan="7"><font size="5"><b><i><u>My Report</u></i></b></font></td></tr> <!-- Report title -->
<tr><td/></tr></table>
<table><tr><td/></tr></table>
<table border="1"> <!-- Headers -->
<tr>
<th colspan="7">Parent Facility</th>
<th>NAME</th>
<th>DESCRIPTION</th>
<th>TYPE</th>
<th>IDENTIFIER</th>
<th>PARAMETER</th>
<th>DATE</th>
<th>TOTAL COUNT</th>
</tr>
</table>
<xsl:for-each select="ESOURCE">
<table border="1"><tr>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last()]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 1]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 2]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 3]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 4]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 5]/NAME"/></td>
<td><xsl:value-of select="descendant::ESOURCE_TEXT[last() - 6]/NAME"/></td>
<td><xsl:value-of select="ESOURCE_TEXT/NAME"/></td>
<td><xsl:value-of select="ESOURCE_TEXT/DESCRIPTION"/></td>
<td><table><xsl:for-each select="MEASURE[count(. | key('fact', concat(S_ID, ' ', MAT_ID, ' ', DATE))[1]) = 1]">
<xsl:sort select="MATERIAL_TEXT/NAME"/>
<xsl:sort select="DATE"/>
<tr>
<td><xsl:value-of select="MATERIAL_TEXT/NAME"/></td>
<td><xsl:value-of select="START_DATE"/></td>
<td><xsl:value-of select="count(//STATUS[.=current()/STATUS])"/></td>
</tr>
</xsl:for-each></table></td>
</tr></table>
</xsl:for-each>
</HTML>
</xsl:template>
</xsl:stylesheet>
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Re: count in XSLT, Need Help Please !!!
Both the instance and the stylesheet are invalid. Please try posting correct samples and simplified as much as possible to show where you have difficulties.
Regards,
George
Regards,
George
George Cristian Bina
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