Subject: Re: 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
|