[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

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
Keywords
xml