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 22:26:16 -0000 |
Indeed, I was going to add that the "real" way to do this under 1.0 was XSLT sibling recursion, but I forgot. Thanks David! On Thu, Feb 18, 2021 at 4:35 PM David Carlisle d.p.carlisle@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > > I am facing an XPath problem > > The answers so far have answered the question asked, but I wonder if that > is the wrong question. > > To select the consecutive sequence of foo elements in xpath 1 requires > some kind of double pass over the list and quadratic behaviour in the > number of elements in the list. > > However if (as appears the case) the question is in an XSLT context rather > than pure Xpath, you can usually avoid selecting the elements in a single > expression. > this does a single pass over the list stopping at the first non-foo > element so is linear complexity > > xpath is just used to select one element at a time, the logic of handling > just foo elements is pushed to a specific XSLT mode that only handles foo > and stops at anything else, > > Given > > <x> > > <b> > <foo>1</foo> > <foo>2</foo> > <bar>x</bar> > <foo>3</foo> > </b> > > <b> > <foo>4</foo> > <foo>5</foo> > <foo>6</foo> > </b> > > <b> > <bar>y</bar> > <foo>7</foo> > <foo>8</foo> > </b> > > </x> > > > this stylesheet > > <xsl:stylesheet version="1.0" xmlns:xsl=" > http://www.w3.org/1999/XSL/Transform"> > > <xsl:template match="b"> > <zzz> > <xsl:apply-templates mode="onlyfoo" select="*[1]"/> > </zzz> > </xsl:template> > > <xsl:template mode="onlyfoo" match="*"/> > > <xsl:template mode="onlyfoo" match="foo"> > <xsl:copy-of select="."/> > <xsl:apply-templates mode="onlyfoo" select="following-sibling::*[1]"/> > </xsl:template> > > </xsl:stylesheet> > > > produces > > > <zzz><foo>1</foo><foo>2</foo></zzz> > > <zzz><foo>4</foo><foo>5</foo><foo>6</foo></zzz> > > <zzz/> > > > > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/174322> (by > email <>) > -- ...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, David Carlisle d.p.c | Thread | Re: [xsl] with XPath 1.0, select al, Leo Studer leo.stude |
Re: [xsl] with XPath 1.0, select al, David Carlisle d.p.c | Date | Re: [xsl] with XPath 1.0, select al, Dimitre Novatchev dn |
Month |