Re: [xsl] For-each-group group-starting-with drops text between inline elements

Subject: Re: [xsl] For-each-group group-starting-with drops text between inline elements
From: "Wendell Piez wapiez@xxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 3 Sep 2020 15:28:50 -0000
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 <
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>&#10;</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 <>)
>


-- 
...Wendell Piez... ...wendell -at- nist -dot- gov...
...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...

Current Thread