[xsl] Group and change heading element

Subject: [xsl] Group and change heading element
From: "Charles O'Connor coconnor@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 12 Sep 2018 17:49:17 -0000
Hi all,

Using XSLT 2.0, Saxon PE 9.7.0.15 in Oxygen 19

I am attempting to wrap headings and paragraphs into <sec> elements while
changing the <h1> to <title>. So, given this XML

<root>
    <body><div class="abstract">
        <h1><b>Bold</b> Intro!</h1>
        <p>This is an intro <i>with <b>various</b> formatting</i> and other
stuff.</p>
        <p>This is a second para in the intro</p>
        <h1>Methods</h1>
        <p>There is no method to our madness</p>
        <h1>Results</h1>
        <p>The results are soooo good . . . </p>
        <p> . . . they require . . . </p>
        <p> . . . three paragraphs</p>
        <h1>Conclusion</h1>
        <p>This is all that is necessary</p>
    </div></body>
</root>

I want:

<root>
    <body>
        <abstract>
            <sec>
                <title><bold>Bold</bold> Intro!</title>
                <p>This is an intro <italic>with <bold>various</bold>
formatting</italic> and other
                    stuff.</p>
                <p>This is a second para in the intro</p>
            </sec>
            <sec>
                <title>Methods</title>
                <p>There is no method to our madness</p>
            </sec>
            <sec>
                <title>Results</title>
                <p>The results are soooo good . . . </p>
                <p> . . . they require . . . </p>
                <p> . . . three paragraphs</p>
            </sec>
            <sec>
                <title>Conclusion</title>
                <p>This is all that is necessary</p>
            </sec>
        </abstract>
    </body>
</root>

But with this template:

  <xsl:template match="div">
        <abstract>
            <xsl:for-each-group select="*" group-starting-with="h1">
                <sec>
                    <title>
                        <!--<xsl:value-of select="."/>-->
                        <xsl:apply-templates/>
                    </title>
                    <xsl:for-each select="current-group()">
                        <xsl:copy>
                            <xsl:apply-templates/>
                        </xsl:copy>
                    </xsl:for-each>
                </sec>
            </xsl:for-each-group>
        </abstract>
    </xsl:template>

I get

<root>
    <body>
        <abstract>
            <sec>
                <title><bold>Bold</bold> Intro!</title>
                <h1><bold>Bold</bold> Intro!</h1>
                <p>This is an intro <italic>with <bold>various</bold>
formatting</italic> and other
                    stuff.</p>
                <p>This is a second para in the intro</p>
            </sec>
            <sec>
                <title>Methods</title>
                <h1>Methods</h1>
                <p>There is no method to our madness</p>
            </sec>
            <sec>
                <title>Results</title>
                <h1>Results</h1>
                <p>The results are soooo good . . . </p>
                <p> . . . they require . . . </p>
                <p> . . . three paragraphs</p>
            </sec>
            <sec>
                <title>Conclusion</title>
                <h1>Conclusion</h1>
                <p>This is all that is necessary</p>
            </sec>
        </abstract>
    </body>
</root>

That is, the <h1> element is retained. I've tried various ways of excluding it
from the results, but the best I've done gets rid of the element but retains
the text.

Thanks for your help!
-Charles

Charles O'Connor l Business Analyst
Aries Systems Corporation l www.ariessys.com
50 High Street, Suite 21 l North Andover, MA l 01845 l USA
Direct: 802-585-5655 Main: 978-975-7570 l Help Desk: 978-291-1966 | Fax:
978-975-3811

Current Thread