xsl-list
[Top] [All Lists]

RE: Compute sum of a computed node list

2004-05-06 08:10:04
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 


<Prev in Thread] Current Thread [Next in Thread>