Hi,
Sibling recursion would work for this, but so would this, I think. Plus
it might (or might not) be easier to maintain:
<xsl:template match="p">
<p>
<xsl:call-template name="merge-spans"/>
</p>
</xsl:template>
<xsl:template name="merge-spans">
<xsl:for-each-group select="node()" group-adjacent="m:class(.)">
<xsl:choose>
<xsl:when test="string(current-grouping-key())">
<span class="{current-grouping-key()}">
<xsl:apply-templates
select="current-group()" mode="merged"/>
</span>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
<xsl:function name="m:class" as="xs:string">
<!-- returns a class value for a span, or the class value of an
immediately preceding span for whitespace-only text,
comment or PI nodes -->
<xsl:param name="s" as="node()"/>
<xsl:sequence select="($s/self::span/@class,
$s/(self::text()[not(normalize-space())] |
self::comment() |
self::processing-instruction() )/
preceding-sibling::*[1][self::span]/@class,
'')[1]"/>
</xsl:function>
<xsl:template match="node()" mode="merged">
<xsl:apply-templates select="."/>
</xsl:template>
<xsl:template match="span[@class]" mode="merged">
<xsl:apply-templates/>
</xsl:template>
Cheers,
Wendell
On 10/27/2011 4:13 AM, Nic Gibson wrote:
<p><span class="strong-emphasis">Fome</span> <span
class="strong-emphasis">Zero</span>
<span class="strong">: la stratégie du Brésil pour résoudre les problèmes de
l'insécurité alimentaire et de la faim </span></p>
And also:
<p><span class="strong">C</span><span class="strong">ontexte</span></p>
I need to merge those spans with identical class attribute values along with
the whitespace to get something like:
<p><span class="strong-emphasis">Fome Zero</span>
<span class="strong">: la stratégie du Brésil pour résoudre les problèmes de
l'insécurité alimentaire et de la faim </span></p>
And:
<p><span class="strong">Contexte</span></p>
--
======================================================================
Wendell Piez
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9635
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--