Re: [xsl] filtering elements by single xpath

Subject: Re: [xsl] filtering elements by single xpath
From: "andrew welch" <andrew.j.welch@xxxxxxxxx>
Date: Wed, 5 Apr 2006 16:08:20 +0100
On 4/5/06, Tomas Kolaci <kolaci@xxxxxxx> wrote:
>  Hi!
>
>  I'm using XSLT 1.1 and Saxon 6.5.3.
>
>  I have following XML structure:
>
> <root>
>    <body>
>       <item pos="1" name="n1"/>
>       <item pos="2" name="n2"/>
>       <item pos="3" name="n2"/>
>       <item pos="4" name="n3"/>
>       <item pos="5" name="n4"/>
>    </body>
>    <item-filter>
>       <allow-items with-name="n2"/>
>       <allow-items with-name="n4"/>
>    </item-filter>
> </root>
>
> and in template:
>
> <xsl:template match="body">
>    <xsl:variable
>      name="filtered-items"
>      select="item[/root/item-filter/allow-items[@with-name = ???/@name]"
>    />
>    ...
> </xsl:template>
>
> I'm trying to fill variable filtered-items with elements item with
"allowed"
> name (= there is an element /root/item-filter/allow-items with attribute
> @with-name containing same value as item's @name)*, but I don't know how to
> reach current item on ??? position in my select (function current() points
> to current body element).

use current()/item-filter/allow-items/@with-name

alternatively create a key

<xsl:key name="allowed-items" match="allow-items" use="@with-name"/>

and then check if the node exists in the key with that value

select="item[key('allowed-items', @name)]"

cheers
andrew

Current Thread