Re: [xsl] XPath using descendant and negative matching

Subject: Re: [xsl] XPath using descendant and negative matching
From: David Carlisle <davidc@xxxxxxxxx>
Date: Wed, 3 Dec 2003 15:38:26 GMT
    <xsl:template match="*[descendant::*/Partners]">

that matches all elements that have a descendent that has a Partners
child,  note it doesn't match elements that have a Partners child
(unless that Partners itself has a Partners descendant)

You probably just want to match elements that have a Partners child

*[Partners]

or elements that have a Partners descendant

*[.//Partners]

although note that any use of // is potentially expensive.



     <xsl:template match="*[descendant::*/[not Partners]]">

not() is a function so takes () like all otherf unctions

<xsl:template match="*[descendant::*/[not(Partners)]]">

matches any element that has a descendent that is not a Partners
which is almost certainly not what you want.

Assuming you want one of teh above, teh negation is

*[not(Partners)]
or
*[not(.//Partners)]
or more simply, just
*
as a match="*" has lower priority than match="*[Partners]" so
will only be used in teh "other" case.

David



-- 
http://www.dcarlisle.demon.co.uk/matthew

________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

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


Current Thread