Subject: Re: [xsl] XPath for matching multiple child elements From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx> Date: Thu, 28 Sep 2006 19:30:38 -0700 |
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:key name="kComDesc" match="h1|p|b|i" use="exists(ancestor::Comments[1])"/>
<xsl:template match="key('kComDesc', 'true')"> Whatever processing here </xsl:template> </xsl:stylesheet>
-- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play
> But it's free enough to support a bit of a workaround, even > if you have no schema: > > <xsl:variable name="comment-elements" > select="//comments//(h1|p|b|i)"/> > > <xsl:template match="*[exists(. intersect $comment-elements)]"> > ... > </xsl:template> > > I think this should work.
Yes, but it might have fairly horrible performance.
I don't know how other processors work, but with Saxon, patterns are a lot more efficient if they identify the element names that match, because Saxon basically does a hash lookup on the node kind and then on the node name. Any match="*" pattern gets tested against every node; and in this case that will involve a serial search through the list of h1|p|b|i elements, which is distinctly O(n^2). Not worth the savings in keystrokes.
Michael Kay http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] XPath for matching multip, Michael Kay | Thread | RE: [xsl] XPath for matching multip, Michael Kay |
Re: [xsl] Preventing second click, Oleg Konovalov | Date | Re: [xsl] XPath for matching multip, Will McCutchen |
Month |