[xsl] Re: XPath: selecting matching nodes in two node-sets

Subject: [xsl] Re: XPath: selecting matching nodes in two node-sets
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Mon, 20 Oct 2003 22:39:37 +0200
"Richard Lewis" <richard.lewis@xxxxxxxxx> wrote in message
> So what I need is a XPath expression which says:
> select 'items' where every 'keywords/matches' is present in './matches'.

Yes, this was not exactly said in your previous message. You said:

"and what I need is an XPath expression which selects all the <item>s which
have the same set of <matches /> elements as in the <keywords> node.
(Note: there may be repetition of <matches />s in <item>s but not in

and this means not only that "every 'keywords/matches' is present in
'./matches' " but also that "./matches" should not contain anything elde
(that is not in  "keywords/matches")

This is why the solution I recommended was:

    <xsl:variable name="vItems" select="/*/item"/>
    <xsl:for-each select="$vItems">
      <xsl:copy-of select=
                  [not(. = current()/matches)]
           not(matches[not(. = /*/keywords/matches)])

Now what you want is simpler -- just remove the "and" and its second
argument in the predicate:

      <xsl:copy-of select=
       "self::*[not(/*/keywords/matches[not(. = current()/matches)])]"/>


Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Current Thread