|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: XPath: selecting matching nodes in two node-sets
> 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








