Hi Chris,

I was attempting to do something similar in the past week, and came across
the following discussion on the issue.  I found it helpful:

http://nick-dunn.co.uk/article/an-alternative-for-loop-using-xslt-and-template-callbacks/

Lloyd

On Fri, Sep 10, 2010 at 12:53 PM, CRANFORD, CHRIS <[email protected]
> wrote:

> 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 &lt;= 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]
>
>

Reply via email to