RE: [xsl] How to specify document order location path for identical elements with different parents?

Subject: RE: [xsl] How to specify document order location path for identical elements with different parents?
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Fri, 2 Apr 2004 21:29:39 +0100
> -----Original Message-----
> From: Alan Stein [mailto:as@xxxxxxxxxxx] 
> Sent: 02 April 2004 19:38
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] How to specify document order location path 
> for identical elements with different parents?
> 
> Thanks much for the help with my previous posting. 
> 
> I think I've better articulated my question in the following example:
> 
> Given the following XML:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <reportlist>
>     <report>
>         <codelist>
>             <code type="a"/>
>         </codelist>
>         <codelist>
>             <code type="b"/>
>             <code type="c"/>
>         </codelist>
>     </report>
>     <report>
>         <codelist>
>             <code type="a"/>
>             <code type="b"/>
>         </codelist>
>         <codelist>
>             <code type="a"/>
>         </codelist>
>     </report>
>     <report>
>         <codelist>
>             <code type="z"/>
>             <code type="a"/>
>             <code type="d"/>
>         </codelist>
>     </report>
>     <report>
>         <codelist>
>             <code type="a"/>
>             <code type="e"/>
>             <code type="f"/>
>         </codelist>
>     </report>
>     <report>
>         <codelist>
>             <code type="e"/>
>         </codelist>
>     </report>
> </reportlist>
> 
> 
> How do I perform the following queries?
> 
> 1)  What is the number of reports which are coded with either 
> an "a" or 
> "b" where the last "a" or "b" code of the report (in document 
> order) is 
> an "a"?
> 
> (correct number is 3.  Yes, this has been double checked.)

count(report[(.//code[@type="a" or @type="b")][last()][@type="a"]])
> 
> 
> 2)  What is the number of reports which are coded with either 
> an "a" or 
> "b" where the last "a" or "b" code of the report (in document 
> order) is 
> a "b".
> 
> (correct number is 1.  Yes, this has been double-checked.)

count(report[(.//code[@type="a" or @type="b")][last()][@type="b"]])

Not tested.

Michael Kay

Current Thread