Subject: Re: [xsl] For-each-group group-starting-with drops text between inline elements From: "Terry Ofner tdofner@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 3 Sep 2020 15:37:47 -0000 |
Thanks Wendell and Martin. Of course. Makes sense. /node() works perfectly in this instance. > On Sep 3, 2020, at 11:29 AM, Wendell Piez wapiez@xxxxxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Terry, > > Don't kick yourself, but the path in your select expression "div/p[@class='passage']/*" will select only elements. > > To select all nodes, use "div/p[@class='passage']/node()", or for just elements and text (no comments or PIs, use "div/p[@class='passage']/(* | text())". > > I can see this easily 'cause I've made this mistake dozens of times. > > Cheers, Wendell > > > On Thu, Sep 3, 2020 at 11:20 AM Terry Ofner tdofner@xxxxxxxxx <mailto:tdofner@xxxxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote: > I have a document with the following structure: > <div> > <p class="passage"> > <span class="itemNum">(1)</span>First <b>sentence</b> of the passage. <span class="itemNum">(2)</span> Second sentence of the passage. <span class="itemNum">(3)</span> Third sentence of the passage. > </p> > </div> > > I need to chunk this into separte items: > > <div class="passage_set"> > <p class="item" itemNum="(1)"><b>(1)</b> First <b>sentence</b> of the passage.</p> > <p class="item" itemNum="(2)"><b>(2)</b> Second sentence of the passage.</p> > <p class="item" itemNum="(3)"><b>(3)</b> Third sentence of the passage.</p> > </div> > > If there were no nodes in the text between spans, I could use tokenize, which I do on such occasions. > With sets such as the one above, I have been trying to use for-each-group. But I am unable to capture the text between the span elements. > Here is the relevant section of my current stylesheet (3.0 Saxon-PE 9.8.0.12): > > <xsl:variable name="passage_raw"> > <div class="passage_set"> > <xsl:for-each-group select="div/p[@class='passage']/*" group-starting-with="span"> > <xsl:text> </xsl:text> > <p class="item"> > <xsl:attribute name="itemNum"> > <xsl:value-of select="current-group()[1]"/> > </xsl:attribute> > <xsl:copy-of select="current-group()"/> > </p> > </xsl:for-each-group> > </div> > </xsl:variable> > > Here is the output: > > <div class="passage_set"> > <p class="item" itemNum="(1)"><span class="itemNum">(1)</span><b>sentence</b></p> > <p class="item" itemNum="(2)"><span class="itemNum">(2)</span></p> > <p class="item" itemNum="(3)"><span class="itemNum">(3)</span></p> > </div> > > I feel like I am close. > Is there any way to capture the text following the span using grouping or any other method available in 3.0? > > Any help would be much appreciated. > > Terry > > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/174322> (by email <applewebdata://441651FB-57C6-4AA3-BC14-21AAC64B3A82>) > > > -- > ...Wendell Piez... ...wendell -at- nist -dot- gov... > ...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org... > ...github.com/wendellpiez. <http://github.com/wendellpiez.>.. ...gitlab.coko.foundation/wendell... > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/723745> (by email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] For-each-group group-star, Wendell Piez wapiez@ | Thread | [xsl] Re: [saxon] Pattern matching , Dimitre Novatchev dn |
Re: [xsl] For-each-group group-star, Wendell Piez wapiez@ | Date | Re: [xsl] attribute value templates, Dimitre Novatchev dn |
Month |