RE: [xsl] Compute sum of a computed node list

Subject: RE: [xsl] Compute sum of a computed node list
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Thu, 6 May 2004 08:10:04 -0700 (PDT)
Hi Vidya,
Below is the modified stylesheet. It also uses the
nodeset function.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xalan="http://xml.apache.org/xalan";
exclude-result-prefixes="xalan">
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>

<xsl:decimal-format name="MyFormat"
decimal-separator="." grouping-separator=","/>

<xsl:template match="/">
  <xsl:apply-templates select="abcd_list"/>
</xsl:template>

<xsl:template match="abcd_list">
  <abcd_list>
    <xsl:for-each select="abcd">
      <abcd>
	<xsl:variable name="state_local_salary"
select="state_local_salary"/>
	<xsl:variable name="quarterly_sessions"
select="quarterly_sessions"/>
	<xsl:variable name="non_medicaid_sessions"
select="non_medicaid_sessions"/>
	<xsl:variable name="var_state_local_match"
select="$state_local_salary * ($quarterly_sessions div
($non_medicaid_sessions))"/>
					<state_local_match>
	   <xsl:value-of
select="format-number($var_state_local_match,'###,###.##','MyFormat')"/>
	</state_local_match>
      </abcd>
    </xsl:for-each>
    
    <xsl:variable name="rtf">
       <xsl:for-each select="abcd">
	 <abcd>
	   <xsl:if test="state_local_salary[not(@null)]">
             <xsl:variable name="state_local_salary"
select="state_local_salary"/>
	     <xsl:variable name="quarterly_sessions"
select="quarterly_sessions"/>
	     <xsl:variable name="non_medicaid_sessions"
select="non_medicaid_sessions"/>
	     <xsl:variable name="var_state_local_match"
select="$state_local_salary * ($quarterly_sessions div
($non_medicaid_sessions))"/>
	    <state_local_match>
	       <xsl:value-of
select="$var_state_local_match"/>
	    </state_local_match>
         </xsl:if>
       </abcd>
     </xsl:for-each>
    </xsl:variable>
    
    <state_local_match_total>
	<xsl:value-of
select="format-number(sum(xalan:nodeset($rtf)/abcd/state_local_match),
'###,###.##','MyFormat')"/>
    </state_local_match_total>

</abcd_list>
</xsl:template>

</xsl:stylesheet>

Regards,
Mukul


> THE XSLT FILE
> ===================    
> 
> <xsl:template match="abcd_list">
>         <abcd_list>
>             <xsl:for-each select="abcd">
>                 <abcd>                 
>                     <xsl:variable
> name="state_local_salary"
> select="state_local_salary"/>
>                     <xsl:variable
> name="quarterly_sessions"
> select="quarterly_sessions"/>
>                     <xsl:variable
> name="non_medicaid_sessions"
> select="non_medicaid_sessions"/>                    
>                     <xsl:variable
> name="var_state_local_match"
> select="$state_local_salary * ($quarterly_sessions
> div
> ($non_medicaid_sessions))"/>
>                      
>               
>                     <state_local_match>
>                         <xsl:value-of
>
select="format-number($var_state_local_match,'###,###.##','MyFormat')"/>
>                     </state_local_match>
> 
>                 </abcd>
>             </xsl:for-each>
>             <state_local_match_total>
>             <xsl:value-of
>
select="format-number(sum(rehab/state_local_match[number(.)!='-']),'###,###.
> ##','MyFormat')"/>
>         </state_local_match_total>
>         </abcd_list>
>     </xsl:template>
> 
> SAMPLE FILE
> ===============
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <abcd_list>
>     <abcd num="1">        
>        
> <state_local_salary>1600.0</state_local_salary>
>         <quarterly_sessions>12</quarterly_sessions>
>        
> <non_medicaid_sessions>2</non_medicaid_sessions>    
>    
>     </abcd>
>     <abcd num="2">        
>         <state_local_salary null="true"/>
>         <quarterly_sessions>9</quarterly_sessions>
>        
> <non_medicaid_sessions>2</non_medicaid_sessions>    
>    
>     </abcd>
>     <abcd num="3">        
>        
> <state_local_salary>1700.0</state_local_salary>
>         <quarterly_sessions>7</quarterly_sessions>
>        
> <non_medicaid_sessions>2</non_medicaid_sessions>    
>   
>     </abcd>
>     <abcd num="4">       
>        
> <state_local_salary>1700.0</state_local_salary>
>         <quarterly_sessions>5</quarterly_sessions>
>        
> <non_medicaid_sessions>2</non_medicaid_sessions>    
>    
>     </abcd>
> </abcd_list>
> 



	
		
__________________________________
Do you Yahoo!?
Win a $20,000 Career Makeover at Yahoo! HotJobs  
http://hotjobs.sweepstakes.yahoo.com/careermakeover 

Current Thread