Not necessarily write it for me, just direction. I have been playing
with recursive template calls all morning, and thus far this is what
I have arrived at is the following:
<!--
This template matches against a planning record
entry in the plan for every part XML document.
-->
<xsl:template match="record">
<xsl:call-template name="forLoopYear">
<xsl:with-param name="start">
<xsl:value-of select="$curYear"/>
</xsl:with-param>
<xsl:with-param name="end">
<xsl:value-of select="$curYear+(-4)"/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<!--
This template handles iterating over a start
and end year values stepping by 1 year.
-->
<xsl:template name="forLoopYear">
<xsl:param name="start"/>
<xsl:param name="end" />
<xsl:if test="$start != $end">
<xsl:value-of select="$start"/><xsl:text> </xsl:text>
<xsl:call-template name="forLoopMonth">
<xsl:with-param name="month">1</xsl:with-param>
<xsl:with-param name="year">
<xsl:value-of select="$start"/>
</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="forLoopYear">
<xsl:with-param name="start">
<xsl:value-of select="$start+1"/>
</xsl:with-param>
<xsl:with-param name="end">
<xsl:value-of select="$end"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!--
This template handles iterating over months 1
Through 12, looks up the data from the XML
Document and if it exists, displays it;
Otherwise outputs a 0 for the month/year.
-->
<xsl:template name="forLoopMonth">
<xsl:param name="month"/>
<xsl:param name="year"/>
<xsl:if test="$month <= 12">
<xsl:for-each select="usage/details/detail">
<xsl:if test="year = $year">
<xsl:if test="month = $month">
<xsl:value-of select="quantity"/><xsl:text> </xsl:text>
</xsl:if>
</xsl:if>
</xsl:for-each>
<xsl:call-template name="forLoopMonth">
<xsl:with-param name="month">
<xsl:value-of select="$month+1"/>
</xsl:with-param>
<xsl:with-param name="year">
<xsl:value-of select="$year"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
First, this a good approach or is there a better way?
Secondly, how do I handle the scenario where I do not find the node
/usage/details/detail with the specified year/month to output a
standard 0 value?
And I need to look at the original link on how to handle the sum
logic that I will need with this.
> -----Original Message-----
> From: Eric Douglas [mailto:[email protected]]
> Sent: Friday, September 10, 2010 9:48 AM
> To: [email protected]
> Subject: RE: XSLT Help
>
> I was just confused then where you said your "XSLT starts with
> 2010...".
> You apparently meant to say your XSLT does nothing, but this is what
it
> needs to do.
> Are you looking for someone to write an entire XSL file for you, or
> what
> part are you struggling with?
>
> -----Original Message-----
> From: CRANFORD, CHRIS [mailto:[email protected]]
> Sent: Friday, September 10, 2010 10:42 AM
> To: [email protected]
> Subject: RE: XSLT Help
>
> No, all I was showing was the expected output. I still need to code
> the
> XSLT to actually generate that.
>
> > -----Original Message-----
> > From: Eric Douglas [mailto:[email protected]]
> > Sent: Friday, September 10, 2010 9:33 AM
> > To: [email protected]
> > Subject: RE: XSLT Help
> >
> > You already have the XSL to print the months and years and all you
> need
> > is the method to add up the data fields?
> > It sounds like you have the hard part done.
> > Look up the sum method.
> > http://www.w3schools.com/Xpath/xpath_functions.asp
> >
> > -----Original Message-----
> > From: CRANFORD, CHRIS [mailto:[email protected]]
> > Sent: Friday, September 10, 2010 10:23 AM
> > To: [email protected]
> > Subject: XSLT Help
> >
> >
> > I am struggling with the best way to parse the following XML section
> > from my document with XSLT using FOP.
> >
> > <document>
> > <usage>
> > <record>
> > <year>2010</year>
> > <month>1</month>
> > <quantity>1</quantity>
> > </record>
> > <record>
> > <year>2009</year>
> > <month>3</month>
> > <quantity>2</quantity>
> > </record>
> > </usage>
> > </document>
> >
> > In the PDF output, what I actually need to be able to produce is to
> > take the current year (2010) and go backward a total of
> > 4 years. The XML document could contain data in this section that
> > dates back prior to 2006 and that information is just not used in
> this
>
> > output.
> >
> >
> > The PDF should look like the following:
> >
> > J F M A M J J A S O N D Total
> > - - - - - - - - - - - - -----
> > 2010 1 0 0 0 0 0 0 0 0 0 0 0 1
> > 2009 0 0 2 0 0 0 0 0 0 0 0 0 2
> >
> > The XSLT starts with 2010, searches for data for month 1 and steps
by
> 1
> > until 12, keeping a total and then displays the yearly total,
> > decrements the year, resets the month to 1 and starts the process
> > over.
> >
> > During each step, I need to examine the XML document to find if data
> > exists for the year/month in /document/usage/record by those two
data
> > values and if not, default a 0 usage; otherwise read the value of
> > /quantity from the record.
> >
> > Anyone have any suggestions on the best way to do this?
> >
> > Chris
> >
> >
> >
---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: fop-users-
> [email protected]
> >
> >
> >
---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: fop-users-
> [email protected]
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]