I think this could be simplified:
<xsl:template match="*[processing-instruction('Fm')[starts-with(.,
'Condstart')]]">
<xsl:for-each-group select="node()"
group-starting-with="processing-instruction('Fm')[starts-with(.,
'Condstart')]">
<xsl:if
test="self::processing-instruction('Fm')[starts-with(., 'Condstart')]">
<group name="{.}">
<xsl:variable name="pi-end-name"
select="replace(., 'Condstart', 'Condend')"/>
<xsl:variable name="end"
select="following-sibling::processing-instruction('Fm')[. = $pi-end-name][1]">
<xsl:copy-of select="current-group()[.
<< $end]"/>
</group>
</xsl:if>
</xsl:for-each-group>
<xsl:apply-templates/>
</xsl:template>
Michael Kay
Saxonica
Like this:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<results>
<xsl:apply-templates/>
</results>
</xsl:template>
<xsl:template match="*[processing-instruction('Fm')[starts-with(.,
'Condstart')]]">
<xsl:for-each-group select="node()"
group-starting-with="processing-instruction('Fm')[starts-with(.,
'Condstart')]">
<xsl:if
test="self::processing-instruction('Fm')[starts-with(., 'Condstart')]">
<group name="{.}">
<xsl:variable name="pi-end-name"
select="replace(., 'Condstart', 'Condend')"/>
<xsl:for-each-group
select="current-group() except ."
group-ending-with="processing-instruction('Fm')[. = $pi-end-name]">
<xsl:if
test="current-group()[last()][self::processing-instruction('Fm')[. =
$pi-end-name]]">
<xsl:copy-of
select="current-group()[position() ne last()]"/>
</xsl:if>
</xsl:for-each-group>
</group>
</xsl:if>
</xsl:for-each-group>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--