[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Summing hours-worked values from previous siblings

Subject: Re: 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
Re:  Summing hours-worked values from previous siblings
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."/>
  </Session>
</Date>
<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."/>
  </Session>
</Date>
</Month>

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:table-row>
   <fo:table-cell>
     <fo:block xsl:use-attribute-sets="subdiv3">
       <fo:wrapper xsl:use-attribute-sets="title">
         <xsl:text>Daily Total: </xsl:text>
       </fo:wrapper>
         <xsl:value-of select="sum(Notes/@hours-worked)"/>
       <fo:wrapper xsl:use-attribute-sets="title">
           <xsl:text>Accrued: </xsl:text>
       </fo:wrapper>
<!-- 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( (. |
../preceding-sibling::Date/Session)/Notes/@hours-worked)"/>

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( (. |
../preceding-sibling::Date/Session)/Notes/@hours-worked[number()=number()])"/


In XSLT 2.0:


<xsl:value-of select="sum( (. |
../preceding-sibling::Date/Session)/Notes/@hours-worked[.
castable as xsd:double])"/>

    </fo:block>
   </fo:table-cell>
 </fo:table-row>
</xsl:template>

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: http://www.CraneSoftwrights.com/links/udemy.htm Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.