Re: [xsl] Find First Descendants That Match Predicate?

Subject: Re: [xsl] Find First Descendants That Match Predicate?
From: "David Carlisle d.p.carlisle@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 24 Dec 2018 21:31:48 -0000


(I moved /chapter to the end?)


<xsl:stylesheet version="3.0" xmlns:xsl="";>

 <xsl:template match="chapter">

 <xsl:message select="
let $here:=. return
.//section[empty(ancestor::*[title] except



the xpath in the message produces



On Mon, 24 Dec 2018 at 21:13, Graydon graydon@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> On Mon, Dec 24, 2018 at 08:57:40PM -0000, Eliot Kimber ekimber@xxxxxxxxxxxx scripsit:
> > Using XPath 3:
> [snip]
> > Given a starting node, e.g., the root node (but could be any node in the hierarchy) I need to find the first titled "child" nodes, so given the chapter node  I need to find S1 and S2 but not S3.
> If you meant:
> <root>
>     <chapter><title>C1</title>
>     <wrapper>
>         <wrapper>
>             <section><title>S1</title>
>             </section>
>         </wrapper>
>         <section><title>S2</title>
>             <section><title>S3</title>
>             </section>
>         </section>
>     </wrapper>
>     </chapter>
> </root>
> then
> //descendant::*[self::section][title][not(ancestor::*[self::section][title])]
> will give you the first titled element of the type you're looking for.
> You'll need to put the actual values for "foo" and "bar" in where there's a predicate for [self::section]; [self:foo or self::bar]
> -- Graydon

Current Thread