RE: [xsl] preceding/following character?

Subject: RE: [xsl] preceding/following character?
From: "Andrew Welch" <ajwelch@xxxxxxxxxxxxxxx>
Date: Fri, 17 Jun 2005 08:58:27 +0100
> Say I have source with mixed content like:
>
> <foo>Some text and more text <bar/>. Some more text.</foo>
>
> I need a "bar" matched template that will under certain
> conditions move
> that period that immediately follows the element to be ahead it.
>
> E.g., in some conditions, output would be:
>
> <foo_out>Some text and more text.<bar_out/> Some more text.</foo_out>
>
> This seems like a simple problem, but I can't really fathom how to
> solve it.  I'm using XSLT 2.0.

How about:

<xsl:template match="/">
	<div>
		<xsl:apply-templates/>
	</div>
</xsl:template>

<xsl:template match="text()[preceding-sibling::*[1][self::bar]]">
	<xsl:choose>
		<xsl:when test="substring(.,1,1) = '.'">
			<xsl:text/>.<bar_out/>
			<xsl:value-of select="substring(.,2)"/>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="."/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

When applied to:

<foo>Some text and more text <bar/>. Some more text.</foo>

Results in:

<div>Some text and more text .<bar_out/> Some more text.</div>

cheers
andrew

Current Thread