変数に格納されている次の値を変換する方法。
<xsl:variable name="myvar">
There was a <b> super man </b> in the city. He was very brave.
</xsl:variable>
に
<p>There was a <b> super man </b> in the city.</p>
<p>He was very brave.</p>
XSLT 1.0 テンプレートを使用していますか?
この変換:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext xsl">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vMarkup" select="/*/node()"/>
<xsl:template match="/" name="split">
<xsl:param name="pNodes" select="$vMarkup"/>
<xsl:if test="$pNodes">
<xsl:variable name="vTextWithDot" select="$pNodes[self::text()][contains(., '.')]"/>
<xsl:choose>
<xsl:when test="not($vTextWithDot)">
<p><xsl:copy-of select="$pNodes"/></p>
</xsl:when>
<xsl:otherwise>
<p>
<xsl:copy-of select="$vTextWithDot/preceding-sibling::node()"/>
<xsl:copy-of select=
"concat(substring-before($vTextWithDot, '.'), '.')"/>
</p>
<xsl:if test="substring-after($vTextWithDot, '.')
or $vTextWithDot/following-sibling::node()">
<xsl:variable name="vrtfNewNodes">
<xsl:copy-of select="substring-after($vTextWithDot, '.')"/>
<xsl:copy-of select="$vTextWithDot/following-sibling::node()"/>
</xsl:variable>
<xsl:call-template name="split">
<xsl:with-param name="pNodes" select=
"ext:node-set($vrtfNewNodes)/node()"/>
</xsl:call-template>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
この XML ドキュメントに適用した場合:
<t>There was a <b> super man </b> in the city. He was very brave.</t>
必要な正しい結果が生成されます。
<p>There was a <b> super man </b> in the city.</p>
<p> He was very brave.</p>