RE: [xsl] simple query regarding the count function

Subject: RE: [xsl] simple query regarding the count function
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Wed, 8 Oct 2003 22:11:57 +0100
I think what you are looking for is:

xsl:value-ofselect="
count(/header/policy/requirement[ldor_requirement_ifa='Y' and
(ldor_requirement_code='A21C' or
ldor_requirement_code='A50A' or
ldor_requirement_code='OTHR')] )"/>

You can't use "and" and "or" to combine node-sets, only to combine
booleans.

Michael Kay

> 
> 
> 
> Apologies if this has been asked before, but I am struggling 
> a bit with what I think should be a fairly straight forward 
> piece of logic.
> 
> In xsl speak I want to count a number of elements based on 2 
> different children having conditions that must be met to take 
> part in the count.
> 
> According to my actual business example what I want to do is 
> count the number of requirement elements that have a child 
> element of ldor_requirement_ifa set to Y and tanother child 
> element that has to have a requirement code of A21C, A50A or  
> OTHR. The result from the count can only ever be 0,1,2,3
> 
> I thought this would be quite simple to acheive but I keep 
> running into an issue when the query within the result set 
> returns a boolean result which then returns an error. If I 
> remove everything apart from one test, the count will 
> evaluate the condition as expected but obviously this is not 
> what I require. I've gotten close by adding count conditions 
> for each requirement code but I can't integrate the test on 
> the ifa node into this condition.
> 
> If anyone is helpful enough to answer my query I would be 
> most grateful. Some things that you have to aware of, I'm not 
> using templates, apart from one match condition of root at 
> the beginning of the template. So any suggestion involving 
> templates is not going to work unless I drastically rewrite 
> the stylesheet which I don't want to do. I'm also not able to 
> change the structure of the xml.
> 
> Thanks, Simon Demler
> 
> 
> Code snippets below:
> 
> 
> XSL query
> 
> xsl:value-ofselect=" 
> count(/header/policy/requirement[ldor_requirement_ifa='Y'] and
> 
> /header/policy/requirement[ldor_requirement_code='A21C'] or
> 
> /header/policy/requirement[ldor_requirement_code='A50A'] or
> 
> /header/policy/requirement[ldor_requirement_code='OTHR'] )"/>
> 
> this works but doesn't include the ifa requirement condition I need.
> 
> xsl:value-of 
> select="count(/header/policy/requirement[ldor_requirement_code
> ='A21C']) +
> 
> count(/header/policy/requirement[ldor_requirement_code='A50A']) +
> 
> count(/header/policy/requirement[ldor_requirement_code='OTHR'])"/>
> 
> 
> Snippet of xml below
> 
>                 <requirement>
>                         <row_id>400020090040001006</row_id>
>                         <parent_id>400020090040001005</parent_id>
>                         <row_type>LDOR</row_type>
>                         <ldor_activity_policy_id>40001005</
> ldor_activity_policy_id>
>                         <ldor_requirement_category>NB  </ 
> ldor_requirement_category>
>                         <ldor_requirement_ifa>Y</ldor_requirement_ifa>
>                         <ldor_short_description>Med exam 
> &#38; rest</ ldor_short_description>
>                         <ldor_long_description>Please arrange 
> for the life insured to undergo a specialist medical 
> examination and resting E.C.G.</ ldor_long_description>
>                         <ldor_overridden_long_desc>Please 
> arrange for the life insured to undergo a specialist medical 
> examination and resting E.C.G.        </ldor_overridden_long_desc>
>                         <ldor_status>OPEN</ldor_status>
>                         <ldor_raised_date>2003-09-16 
> 14:41:22.15</ ldor_raised_date>
>                         <ldor_completed_date/>
>                         <ldor_last_updated_by>PHainesTestUser</
> ldor_last_updated_by>
>                         <ldor_carb_id/>
>                         
> <ldor_requirement_code>ADDI</ldor_requirement_code>
>                 </requirement>
>                 <requirement>
>                         <row_id>400020090040001008</row_id>
>                         <parent_id>400020090040001005</parent_id>
>                         <row_type>LDOR</row_type>
>                         <ldor_activity_policy_id>40001005</
> ldor_activity_policy_id>
>                         <ldor_requirement_category>NB  </ 
> ldor_requirement_category>
>                         <ldor_requirement_ifa>N</ldor_requirement_ifa>
>                         <ldor_short_description>36(k) - 
> Details</ ldor_short_description>
>                         <ldor_long_description>Answer to 
> serious illness question 36k not supplied</ldor_long_description>
>                         <ldor_overridden_long_desc>Answer to 
> serious illness question 36k not supplied</ldor_overridden_long_desc>
>                         <ldor_status>OPEN</ldor_status>
>                         <ldor_raised_date>2003-09-16 
> 14:40:56.113</ ldor_raised_date>
>                         <ldor_completed_date/>
>                         <ldor_last_updated_by>PHainesTestUser</
> ldor_last_updated_by>
>                         <ldor_carb_id/>
>                         
> <ldor_requirement_code>A21C</ldor_requirement_code>
>                 </requirement>
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread