RE: [xsl] Total Missing documents for each Event‏

Subject: RE: [xsl] Total Missing documents for each Event‏
From: Shashank Jain <shashankjain@xxxxxxxx>
Date: Mon, 26 Apr 2010 12:01:58 -0500
(Sending it again, removed the extra spaces in the code)
Hello All,
 
I am trying to calculate the Sum of total Missing Docs.
Here is my XML:
 
<data>
<event_template sp_mand_doctypes="PSC Minutes, Internal Approval,
Rationale, Trade Instructions, IPS, Final Client Models">
<event complete="N">
    <document_type sp_document_type="Final Client Models"/>
</event>
<event complete="N">
    <document_type sp_document_type="Final Client Models"/>
    <document_type sp_document_type="Rationale"/>
</event>
<event complete="N">
    <document_type sp_document_type="Analyst"/>
</event>
</event_template>
<event_template sp_mand_doctypes="PSC Minutes, Rationale, IPS, Final
Client Models">
<event complete="N">
    <document_type sp_document_type="Final Client Models"/>
</event>
<event complete="N">
    <document_type sp_document_type="Final Client Models"/>
    <document_type sp_document_type="Rationale"/>
</event>
</event_template>
</data>
 
Previously I used following template to calculate number of missing
events, thanks to David for that.
<xsl:template name="eventTemplate">
		<xsl:for-each select="event">
			<xsl:call-template name="NumDocumentsMissing"/>
		</xsl:for-each>
</xsl:template>
 
<xsl:template name="NumDocumentsMissing">
	<xsl:choose>
		<xsl:when test="@complete='Y'">
			<xsl:text>--</xsl:text>
		</xsl:when>
	<xsl:otherwise>
		<xsl:variable name="x"
select="tokenize(parent::node()/@sp_mand_doctypes,'\s*,\s*')"/>
			<xsl:value-of
select="count($x[not(.=current()/document_type/@sp_document_type)])"/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>
 
I got the required output 5,4,6,3,2.
 
Now I am trying to add all those values and for that I am using this
function, so I want the total to be 5+4+6+3+2=20
<xsl:function name="fns:totalMissing">
	<xsl:param name="event" as="element()"/>
	<xsl:choose>
		<xsl:when test="$event/@complete='Y'">
			<xsl:sequence select="0"/>
		</xsl:when>
		<xsl:otherwise>
			<xsl:variable name="x"
select="tokenize($event/../@sp_mand_doctypes,'\s*,\s*')"/>
			<xsl:sequence
select="count($x[not($event/document_type/@sp_document_type)])"/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:function>
 
And calling this function in this way
<xsl:sequence select="sum(//event/fns:totalMissing(.))"/>
 
I am not able to get the desired output. Looks like Function is not
calculating the value at each event properly. Please correct me where
I am doing it wrong.
 
Thanks
Shashank 		 	   		  
----------------------------------------
> From: shashankjain@xxxxxxxx
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> CC: davidc@xxxxxxxxx
> Date: Mon, 26 Apr 2010 11:51:19 -0500
> Subject: RE: [xsl] Total Missing documents for each Event~
>
>
>
> 
>
>
> Hello All,
>
>
>
> I am trying to calculate the Sum of total Missing Docs.
>
> Here is my XML:
>
>
>
> 
>
> 
>
> 
>
>
> 
>
> 
>
> 
>
>
> 
>
>
> 
>
> 
>
> 
>
>
> 
>
> 
>
> 
>
> 
>
> 
>
>
> 
>
> 
>
> 
>
>
> 
>
>
> 
>
> 
>
> 
>
> 
>
>
>
> Previously I used following template to calculate number
> of missing events, thanks to David for that.
>
> 
>
>             
> select="event">
>
>                   
> name="NumDocumentsMissing"/>
>
>             
>
> 
>
>
>
> 
>
>       
>
>             
> test="@complete='Y'">
>
>                   --
>
>             
>
>       
>
>             
> name="x"
> select="tokenize(parent::node()/@sp_mand_doctypes,'\s*,\s*')"/>
>
>                   
> select="count($x[not(.=current()/document_type/@sp_document_type)])"/>
>
>             
>
>       
>
> 
>
>
>
> I got the required output 5,4,6,3,2.
>
>
>
> Now I am trying to add all those values and for that I am
> using this function, so I want the total to be 5+4+6+3+2=20
>
> 
>
>       
> name="event" as="element()"/>
>
>       
>
>             
> test="$event/@complete='Y'">
>
>                   
> select="0"/>
>
>             
>
>             
>
>                   
> select="tokenize($event/../@sp_mand_doctypes,'\s*,\s*')"/>
>
>                   
> select="count($x[not($event/document_type/@sp_document_type)])"/>
>
>             
>
>       
>
> 
>
>
>
> And calling this function in this way
>
> 
>
>
>
> I am not able to get the desired output. Looks like
> Function is not calculating the value at each event properly. Please correct me
> where I am doing it wrong.
>
>
>
> Thanks
>
> Shashank
>
>
>
>
>
>> From: shashankjain@xxxxxxxx
>> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>> CC: davidc@xxxxxxxxx
>> Date: Fri, 9 Apr 2010 11:35:27 -0500
>> Subject: RE: [xsl] Total Missing documents for each Event~
>>
>>
>> Thanks David !
>>
>> You understood my requirement very well, this is exactly what I wanted.
>> I agree my code is vastly complicated , I will work on it to write more efficient code.
>>
>> Thanks again.
>>
>> Shashank
>>
>> ----------------------------------------
>>> Date: Fri, 9 Apr 2010 17:00:02 +0100
>>> From: davidc@xxxxxxxxx
>>> To: shashankjain@xxxxxxxx
>>> CC: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>>> Subject: Re: [xsl] Total Missing documents for each Event~
>>>
>>> Either I'm not understanding your requirements or your code is vastly
>>> more complicated than needed (or both)
>>>
>>> i think you just want
>>>
>>>
>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>>>
>>>
>>>
>>>
>>> select="tokenize(@sp_mand_doctypes,'\s*,\s*')"/>
>>>
>>> For event
>>> list is:
>>> select="$x[not(.=current()/document_type/@sp_document_type)]"
>>> separator=","/>
>>> count
>>>
>>> select="count($x[not(.=current()/document_type/@sp_document_type)])"/>
>>> additional docs:
>>> select="document_type/@sp_document_type[not(.=$x)]"
>>> separator=","/>
>>> count
>>>
>>>
>>>
>>>
>>>
>>>
>>> which makes
>>>
>>>
>>> $ saxon9 list.xml list.xsl
>>>
>>>
>>> For event 1
>>> list is: PSC Minutes,Internal Approval,Rationale,Trade
>>> Instructions,IPS count 5
>>> additional docs: count 0
>>> For event 2
>>> list is: PSC Minutes,Internal Approval,Trade Instructions,IPS count 4
>>> additional docs: count 0
>>> For event 3
>>> list is: PSC Minutes,Internal Approval,Rationale,Trade
>>> Instructions,IPS,Final Client Models count 6
>>> additional docs: Analyst count 1
>>>
>>>
>>>
>>>
>>>
>>> ________________________________________________________________________
>>> The Numerical Algorithms Group Ltd is a company registered in England
>>> and Wales with company number 1249803. The registered office is:
>>> Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
>>>
>>> This e-mail has been scanned for all viruses by Star. The service is
>>> powered by MessageLabs.
>>> ________________________________________________________________________
>>>
>>
>> _________________________________________________________________
>> The New Busy is not the too busy. Combine all your e-mail accounts with Hotmail.
>> http://www.windowslive.com/campaign/thenewbusy?tile=multiaccount&ocid=PID28326::T:WLMTAGL:ON:WL:en-US:WM_HMP:042010_4
>>
>
> _________________________________________________________________
> The New Busy is not the old busy. Search, chat and e-mail from your inbox.
> http://www.windowslive.com/campaign/thenewbusy?ocid=PID28326::T:WLMTAGL:ON:WL:en-US:WM_HMP:042010_3
>
 		 	   		  
_________________________________________________________________
The New Busy is not the old busy. Search, chat and e-mail from your inbox.
http://www.windowslive.com/campaign/thenewbusy?ocid=PID28326::T:WLMTAGL:ON:WL:en-US:WM_HMP:042010_3

Current Thread