Subject: Re: [xsl] with XPath 1.0, select all following sibling elements of name "foo" up to the first non-"foo" element From: "Wendell Piez wapiez@xxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 18 Feb 2021 16:06:01 -0000 |
Hi, With a sequence of variable declarations: <xsl:variable name="name" select="name()"/> <xsl:variable name="followers" select="following-sibling::*[name()=$name]"/> <xsl:variable name="interlopers" select="following-sibling::*[not(name()=$name)] | following-sibling::*[not(name()=$name)]/following-sibling::*"/> <xsl:variable name="invited" select=". | $followers[not(count(.|$interlopers)=count($interlopers))]"/> Note: untested. Good luck, Wendell On Wed, Feb 17, 2021 at 8:32 PM Wolfhart Totschnig wolfhart.totschnig@xxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Dear list, > > I am facing an XPath problem for which I cannot find the solution. I > want to select all following sibling elements of name "foo" up to the > first non-"foo" element. So, in the following case, the first two <foo> > elements should be selected: > > <foo/> > <foo/> > <bar/> > <foo/> > > In the following case, all three <foo> elements should be selected: > > <foo/> > <foo/> > <foo/> > > And in the following case, nothing should be selected: > > <bar/> > <foo/> > <foo/> > > I came up with the following non-working approach: > > <xsl:choose> > <xsl:when > test="not(following-sibling::*[not(self::foo)])"> > <xsl:value-of select="following-sibling::*"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of > > select="following-sibling::*[not(self::source)][1]/preceding-sibling::*[self::source][preceding-sibling::current()]"/> > </xsl:otherwise> > </xsl:choose> > > That is, test whether there are non-"foo" following siblings. If there > are none, take all following siblings. If there are, go forward to the > first non-"foo" sibling, and from there go backwards, taking all the > "foo" siblings up to the current node. > > But this does not work. Apparently, the expression > "preceding-sibling::current()" is not a valid construct. So what is the > correct way to do what I have in mind (or a simpler solution, if there > is one). Please note that this stylesheet needs to be executed by a web > browser, and so the solution has to remain within XPath 1.0. > > Thanks in advance for your help! > Wolfhart > > > -- ...Wendell Piez... ...wendell -at- nist -dot- gov... ...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org... ...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] with XPath 1.0, select al, Liam R. E. Quin liam | Thread | Re: [xsl] with XPath 1.0, select al, Wolfhart Totschnig w |
Re: [xsl] with XPath 1.0, select al, Liam R. E. Quin liam | Date | [xsl] [Markup] [ANN] Balisage 2021 , B Tommie Usdin btusd |
Month |