Need help in counting
Here should go questions about transforming XML with XSLT and FOP.
-
- Posts: 9
- Joined: Thu Dec 11, 2008 10:15 pm
Need help in counting
I have XML below, FOR EACH <ES_ID> I will have multiple <ID> in <EM_ES_MEASURE>
I want to count that ID's. I can also use STATUS, START_DATE, the counting will be same for these elemnts also.
I am using : <td><table><xsl:for-each select="EM_ES_MEASURE[count(. | key('mea-fact', concat(ES_ID, ' ', MAT_ID, ' ', START_DATE))[1]) = 1]">
<xsl:sort select="EM_MATERIAL_TEXT/NAME"/>
<xsl:sort select="START_DATE"/>
<tr>
<td name="Mea Material" align="center"><xsl:value-of select="EM_MATERIAL_TEXT/NAME"/></td>
<td name="Mea Date" align="center"><xsl:value-of select="START_DATE"/></td>
<td name="Mea Daily Ave" align="center"><xsl:value-of select="sum(../EM_ES_MEASURE[ES_ID = current()/ES_ID and START_DATE = current()/START_DATE and MAT_ID = current()/MAT_ID]/MES_AMOUNT) div count(../EM_ES_MEASURE[ES_ID = current()/ES_ID and START_DATE = current()/START_DATE and MAT_ID = current()/MAT_ID])"/></td>
<td name="Mea Unit" align="center"><xsl:value-of select="EM_UNIT/CODE"/></td>
<td><table>
<xsl:for-each select="EM_ESOURCE/EM_ES_MEASURE">
<td><xsl:value-of select="sum(./STATUS)"/></td>
</xsl:for-each></table>
</td>
How do I do that.
In the outpur file I am getting '0' If I use count, If I sum STATUS I am getting a huge total.
<EM_ES_MEASURE>
<ID>1401546</ID> <ES_ID>1017502</ES_ID> <MES_AMOUNT>13.515278</MES_AMOUNT>
<UNIT>1006561</UNIT>
<START_DATE>2007-01-14</START_DATE>
<STATUS>1</STATUS>
</EM_ES_MEASURE>
<EM_ES_MEASURE>
<ID>1401547</ID>
<ES_ID>1017502</ES_ID>
<MES_AMOUNT>13.546702</MES_AMOUNT>
<UNIT>1006561</UNIT>
<START_DATE>2007-01-14</START_DATE>
<STATUS>1</STATUS>
</EM_MATERIAL_TEXT>
I want to count that ID's. I can also use STATUS, START_DATE, the counting will be same for these elemnts also.
I am using : <td><table><xsl:for-each select="EM_ES_MEASURE[count(. | key('mea-fact', concat(ES_ID, ' ', MAT_ID, ' ', START_DATE))[1]) = 1]">
<xsl:sort select="EM_MATERIAL_TEXT/NAME"/>
<xsl:sort select="START_DATE"/>
<tr>
<td name="Mea Material" align="center"><xsl:value-of select="EM_MATERIAL_TEXT/NAME"/></td>
<td name="Mea Date" align="center"><xsl:value-of select="START_DATE"/></td>
<td name="Mea Daily Ave" align="center"><xsl:value-of select="sum(../EM_ES_MEASURE[ES_ID = current()/ES_ID and START_DATE = current()/START_DATE and MAT_ID = current()/MAT_ID]/MES_AMOUNT) div count(../EM_ES_MEASURE[ES_ID = current()/ES_ID and START_DATE = current()/START_DATE and MAT_ID = current()/MAT_ID])"/></td>
<td name="Mea Unit" align="center"><xsl:value-of select="EM_UNIT/CODE"/></td>
<td><table>
<xsl:for-each select="EM_ESOURCE/EM_ES_MEASURE">
<td><xsl:value-of select="sum(./STATUS)"/></td>
</xsl:for-each></table>
</td>
How do I do that.
In the outpur file I am getting '0' If I use count, If I sum STATUS I am getting a huge total.
<EM_ES_MEASURE>
<ID>1401546</ID> <ES_ID>1017502</ES_ID> <MES_AMOUNT>13.515278</MES_AMOUNT>
<UNIT>1006561</UNIT>
<START_DATE>2007-01-14</START_DATE>
<STATUS>1</STATUS>
</EM_ES_MEASURE>
<EM_ES_MEASURE>
<ID>1401547</ID>
<ES_ID>1017502</ES_ID>
<MES_AMOUNT>13.546702</MES_AMOUNT>
<UNIT>1006561</UNIT>
<START_DATE>2007-01-14</START_DATE>
<STATUS>1</STATUS>
</EM_MATERIAL_TEXT>
-
- Site Admin
- Posts: 2095
- Joined: Thu Jan 09, 2003 2:58 pm
Re: Need help in counting
I tried to look into this but is hard to figure out anything. Try posting a simplified, complete working sample that contains your input, stylesheet, actual output and expected output.
XSLT 2.0 offers you better support for grouping. For example, in case that helps, if you have an input like:
then a stylesheet like below:
will give you as output
Regards,
George
XSLT 2.0 offers you better support for grouping. For example, in case that helps, if you have an input like:
Code: Select all
<test>
<EM_ES_MEASURE>
<ID>1401546</ID>
<ES_ID>1017502</ES_ID>
<MES_AMOUNT>13.515278</MES_AMOUNT>
<UNIT>1006561</UNIT>
<START_DATE>2007-01-14</START_DATE>
<STATUS>1</STATUS>
</EM_ES_MEASURE>
<EM_ES_MEASURE>
<ID>1401547</ID>
<ES_ID>1017502</ES_ID>
<MES_AMOUNT>13.546702</MES_AMOUNT>
<UNIT>1006561</UNIT>
<START_DATE>2007-01-14</START_DATE>
<STATUS>1</STATUS>
<EM_MATERIAL_TEXT/>
</EM_ES_MEASURE>
</test>
Code: Select all
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="/">
<result>
<xsl:for-each-group select="//EM_ES_MEASURE" group-by="ES_ID">
<entry>
<count><xsl:value-of select="count(current-group())"/></count>
<ED_ID><xsl:value-of select="current-grouping-key()"/></ED_ID>
</entry>
</xsl:for-each-group>
</result>
</xsl:template>
</xsl:stylesheet>
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<result>
<entry>
<count>2</count>
<ED_ID>1017502</ED_ID>
</entry>
</result>
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