Re: [xsl] Summing hours-worked values from previous siblings only to determine accrued hours

Subject: Re: [xsl] Summing hours-worked values from previous siblings only to determine accrued hours
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Fri, 13 Apr 2012 16:20:20 -0400
At 2012-04-13 13:16 -0700, Mark wrote:
I am creating a work-report sheet that needs to
know the value of working hours accrued to the
current date for each date. The xml looks like this

<Month name=bAprilb>
<Date day="1">
  <Session task="LS Authorities">
    <Notes hours-worked="2.00" notes="Documented changes from last week."/>
<Date day="2">
  <Session task="LS Authorities">
    <Notes hours-worked="2.00" notes="Worked
with Wayne resolving $2 border cases (see Campfire notes)."/>
    <Notes hours-worked="1.50" notes="Final
boarder case resolution and 655/150 issue."/>

I can get a Daily total of hours worked with a
named template called from the Sessions
template, but how can I show the hours accrued for all previous days?
For the XLM given, My output for the first Date
should be bDaily Total: 2.0 Accrued: 2.0.b
and for the second Date bDaily Total: 3.5. Accrued: 5.5.b

That is, I need to know the value of all
*previous* hours-worked and exclude any
*following* hours-worked. The XSLT so far look like this:

<xsl:template match="Session"> <fo:table-row> <fo:table-cell> <fo:block xsl:use-attribute-sets="subdiv1"> <xsl:value-of select="@task"/> </fo:block> </fo:table-cell> </fo:table-row> <xsl:apply-templates/> <xsl:call-template name="day-total"/> </xsl:template>

<xsl:template name="day-total">
     <fo:block xsl:use-attribute-sets="subdiv3">
       <fo:wrapper xsl:use-attribute-sets="title">
         <xsl:text>Daily Total: </xsl:text>
         <xsl:value-of select="sum(Notes/@hours-worked)"/>
       <fo:wrapper xsl:use-attribute-sets="title">
           <xsl:text>Accrued: </xsl:text>
<!-- What goes here to select all previous Notes/@hours-worked???
           <xsl:value-of select="sum(?????????????Notes/@hours-worked)"/>

Since your current node is <Session> you need to address the Notes descendant of all preceding siblings of the parent Date, plus the Notes child of the current node:

<xsl:value-of select="sum( (. |

Note that if any of the attribute values might
possibly be the empty string, your sum() will be
affected and you can protect the sum in XSLT 1.0 by using a predicate:

<xsl:value-of select="sum( (. |

In XSLT 2.0:

<xsl:value-of select="sum( (. |
castable as xsd:double])"/>


I hope this helps.

. . . . . . Ken

-- Public XSLT, XSL-FO, UBL and code list classes in Europe -- May 2012 Contact us for world-wide XML consulting and instructor-led training Free 5-hour lecture: Crane Softwrights Ltd. G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: Legal business disclaimers:

Current Thread