I am trying to transform a <p>
element with <br/>
elements within into several <alinea>subtext</alinea>
. For instance :
<p>subtext<br/>some more text<br/> some more subtext</p>
From the previous <p>
I was hoping to simply replace all <br/>
into </alinea><alinea>
since the template for <p>
opens a <alinea>
element already.
<xsl:template match="p">
<para><alinea><xsl:apply-templates/></alinea></para>
</xsl:template>
<xsl:template match="br">
</alinea><xsl:apply-templates/><alinea>
</xsl:template>
But it is doesn't validate.
Expected result :
<para>
<alinea>
subtext
</alinea>
<alinea>
some more text
</alinea>
<alinea>
some more subtext
</alinea>
</para>
This is quite easy to do in XSLT 2.0:
<xsl:template match="p">
<para>
<xsl:for-each-group select="node()" group-starting-with="br">
<alinea>
<xsl:copy-of select="current-group()[not(self::br)]" />
</alinea>
</xsl:for-each-group>
</para>
</xsl:template>