"Richard Lewis" <richard(_dot_)lewis(_at_)uea(_dot_)ac(_dot_)uk> wrote in
message
news:200310201935(_dot_)26843(_dot_)richard(_dot_)lewis(_at_)uea(_dot_)ac(_dot_)uk(_dot_)(_dot_)(_dot_)
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