RE: [xsl] Pattern question: first child of first descendant

Subject: RE: [xsl] Pattern question: first child of first descendant
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 24 Mar 2009 08:32:01 -0000
I think it's

match="entry[. is
ancestor::table[1]/descendant::entry[1]]/*[self::title|self::para][1]"

Note the use of "is" rather than "=".

When matching complex patterns like this, it's sometimes best to preselect
all the matching elements into a global variable:

<xsl:variable name="initial-paras"
select="//table/descendant::entry[1]/*[self::title|self::para][1]"/>

<xsl:template match="*[. intersect $initial-paras]">

See also http://www.w3.org/Bugs/Public/show_bug.cgi?id=5464

Michael Kay
http://www.saxonica.com/


> -----Original Message-----
> From: Christian Roth [mailto:roth@xxxxxxxxxxxxxx] 
> Sent: 24 March 2009 01:10
> To: XSL List
> Subject: [xsl] Pattern question: first child of first descendant
> 
> Hello,
> 
> I am looking for a pattern that does "match the first title 
> or para child of the first entry descendant of a table 
> element". I'm using XSLT2.
> 
> The pattern I have come up with so far is
> 
> match="*[self::para or self::title][parent::entry = 
> (ancestor::table[1]// entry)[1]][1]"
> 
> It seems to work, but looks a little cumbersome to me. Is 
> there a better way to express that match?
> 
> - Christian

Current Thread