[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
news:200310201935.26843.richard.lewis@xxxxxxxxxxxx
> 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
<keywords>)"

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=
       "self::*
          [not(/*/keywords/matches
                  [not(. = current()/matches)]
              )
         and
           not(matches[not(. = /*/keywords/matches)])
          ]"/>
    </xsl:for-each>

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)])]"/>



=====
Cheers,

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




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


Current Thread