Subject: Re: [xsl] XPath: selecting matching nodes in two node-sets From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Mon, 20 Oct 2003 04:44:42 -0700 (PDT) |
> I have the following document: > > <results> > <keywords> > <matches> ...</matches> > ... > </keywords> > <item> > ...various elements... > <matches> ...</matches> > <matches> ...</matches> > ... > </item> > <item> ....</item> > ... > </results> > > (where <matches> elements contain the keywords themselves, CDATA). > > 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> ) This transformation: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/"> <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> </xsl:template> </xsl:stylesheet> when applied on this source.xml (,which I find representative for your problem): <results> <keywords> <matches>k1</matches> <matches>k2</matches> <matches>k3</matches> <matches>k4</matches> <matches>k5</matches> </keywords> <item> <matches>k3</matches> <matches>k5</matches> </item> <item> <matches>k4</matches> <matches>k2</matches> <matches>k3</matches> <matches>k1</matches> <matches>k5</matches> </item> <item> <matches>k1</matches> <matches>k2</matches> <matches>k3</matches> <matches>k6</matches> <matches>k5</matches> <matches>k4</matches> </item> <item> <matches>k1</matches> <matches>k6</matches> </item> <item> <matches>k3</matches> <matches>k5</matches> <matches>k3</matches> <matches>k2</matches> <matches>k1</matches> <matches>k2</matches> <matches>k4</matches> <matches>k5</matches> </item> </results> produces the wanted result: <item> <matches>k4</matches> <matches>k2</matches> <matches>k3</matches> <matches>k1</matches> <matches>k5</matches> </item> <item> <matches>k3</matches> <matches>k5</matches> <matches>k3</matches> <matches>k2</matches> <matches>k1</matches> <matches>k2</matches> <matches>k4</matches> <matches>k5</matches> </item> ===== Cheers, Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL __________________________________ Do you Yahoo!? The New Yahoo! Shopping - with improved product search http://shopping.yahoo.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] XPath: selecting matching, Michael Kay | Thread | [xsl] xsl doesnt produce valid xhtm, james walker |
RE: [xsl] Reference problem, Jarno . Elovirta | Date | Re: [xsl] XPath: selecting matching, Mukul Gandhi |
Month |