Subject: RE: [xsl] preceding sibling headaches From: "Michael Kay" <mhk@xxxxxxxxx> Date: Wed, 23 Apr 2003 08:49:09 +0100 |
> I thought that once you used a predicate ([1]), you couldn't go > any further in detail. A lot of people imagine that. I've no idea why. Applying predicates to intermediate steps in a path expression is one of the most powerful techniques in XPath. test="preceding-sibling::*[1]/self::transition" works as follows: 1. Select all the preceding sibling elements 2. Select the first of these 3. Select this node if it is a transition element, or nothing if not 4. Convert the result to a boolean: true if the node-set selected in (3) is non-empty I usually write this one as test="preceding-sibling::*[1][self::transition]" but the result is the same. Avoid tests like name()='transition' if you can. They are likely to be more expensive, and are less resilient to your choice of namespace prefixes in the source document. The only time to use them is when testing against a variable, e.g. name()=$param, and ideally you should then test local-name() and namespace-uri() rather than testing name(). Michael Kay Software AG home: Michael.H.Kay@xxxxxxxxxxxx work: Michael.Kay@xxxxxxxxxxxxxx XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] preceding sibling headach, Paul Tremblay | Thread | Re: [xsl] preceding sibling headach, Andrew Watt |
RE: [xsl] Character entities in att, Michael Kay | Date | RE: [xsl] Re: CDATA output, Michael Kay |
Month |