Subject: RE: Generic template for collapsing arbitrary length runs o f same tag into one tag?
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Thu, 15 Aug 2002 18:37:08 -0400
|
Dave,
Nice solution! (you beat me to it)
I'd suggest two tiny tweaks, which you might judge to be merely aesthetic
although the second does improve performance a bit:
At 02:26 PM 8/15/2002, you wrote:
<xsl:template match="i">
<xsl:if test="not(name(preceding-sibling::node()[1])='i')">
I'd express this as test="not(preceding-sibling::node()[1][self::i])" as a
slightly more direct use of XPath.
<i>
<xsl:apply-templates/>
<xsl:if test="name(following::node()[1])='i'">
<xsl:apply-templates
select="following::node()[1]" mode="following"/>
</xsl:if>
Instead of an apply-templates wrapped in an xsl:if, I'd simply say
<xsl:apply-templates select="following-sibling::node()[1][self::i]"
mode="following"/>
You don't need the test if you can express the selection in such a way that
if the correct node is not there, nothing will come back.
</i>
</xsl:if>
</xsl:template>
<xsl:template match="i" mode="following">
<xsl:apply-templates/>
<xsl:if test="name(following::node()[1])='i'">
<xsl:apply-templates select="following::node()[1]"
mode="following"/>
</xsl:if>
Likewise here.
</xsl:template>
Seems to work in Saxon 6.5.2.
Well done! I don't think we've seen exactly this problem before.
But Richard, you should be aware that any intervening white space between
your <i> elements will not be folded in, but will break the sequence.
Cheers,
Wendell
======================================================================
Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx
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
|