Re: [xsl] combining node restrictions in select statements

Subject: Re: [xsl] combining node restrictions in select statements
From: "andrew welch" <andrew.j.welch@xxxxxxxxx>
Date: Tue, 28 Mar 2006 13:50:40 +0100
On 3/28/06, Andrew Smith <andrew.smith@xxxxxxxxxxxxx> wrote:
> Hi,
>
> I have an XML structure passed to me and I want to perform to different
> node restrictions on the tree.
>
> <root>
>         <a>
>                 <b>GUID1</b>
>                 <c>one</c>
>                 <d>
>                         <e>A1</e>
>                 </d>
>         </a>
>         <a>
>                 <b>GUID1</b>
>                 <c>one</c>
>                 <d>
>                         <e>A1</e>
>                 </d>
>         </a>
>         <a>
>                 <b>GUID2</b>
>                 <c>one</c>
>                 <d>
>                         <e>A1</e>
>                 </d>
>         </a>
> </root>
>
>
> <xsl:apply-templates select="/root/a[d[starts-with(e, 'A')]]" />
>
> I currently have something like that, however, I also want to remove
> duplicate nodes
>
> <xsl:apply-templates select="/root/a[d[starts-with(e, 'A')]] and
> a[not(b=following::a/b)]" />
>
> That however doesn't work. Is there anyway this can be done? If so could
> someone point me in the right direction.

Just drop the 'and' and use two predicates together:

/root/a[d[starts-with(e, 'A')]][not(b=following-sibling::a/b)]

The second predicate will operate on the results of applying the first
predicate.

If performance is important, you would be better off using keys to
remove duplicates.

cheers
andrew

Current Thread