Subject: RE: 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
|