Re: [xsl] Using node-set variables in predicates (another node comparison question)

Subject: Re: [xsl] Using node-set variables in predicates (another node comparison question)
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sat, 1 Jan 2022 10:03:52 -0000
Use (. intersect X). It may not be intuitive, but it does exactly what you
want, and it becomes intuitive once you've done it a few times.

Michael Kay
Saxonica

> On 1 Jan 2022, at 06:00, Chris Papademetrious
christopher.papademetrious@xxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi everyone, and happy new year's!
>
> Let's say I have a variable that contains a set of nodes:
>
> <xsl:variable name="nodes" select="//(foo|bar|baz)"/>
>
> In XPath 3.0, I can apply a template directly to this node-set variable
(very cool!):
>
> <xsl:template match="$nodes">
>
> However, what's the best way to use this node-set variable as a predicate
filter? For example, let's say I wanted to select every preceding sibling node
directly before each node in the variable:
>
> <xsl:template match="preceding-sibling::node()[1][. intersect $nodes]">
>
> The "interesect" operator works, but it's not intuitive. Is there a simple
Boolean operator that indicates whether a given node exists in a set of nodes?
([. = $nodes] compares text evaluations of the nodes, not the nodes
themselves.)
>
> I hope the answer is not obvious, because I spent longer than I'd like to
admit trying to figure this out.  :)
>
> - Chris
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by
email <>)

Current Thread