Я ломал голову над заменой символов XSLT элементами HTML безрезультатно и не могу понять, как заставить XSLT заменить вкладку элементом span, содержащим вкладку.
В документе XHTML есть предварительный элемент, содержащий символы табуляции, и я обнаружил функцию шаблона замены строки XSLT, которую я использую, чтобы попытаться заменить вкладки на вкладки, окруженные интервалами:
<xsl:template match="xhtml:pre">
<xsl:element name="{local-name()}">
<xsl:variable name="BodyText"><span class="tabspan">	</span></xsl:variable>
<xsl:call-template name="replace">
<xsl:with-param name="text" select="@*|node()"/>
<xsl:with-param name="search" select="'	'"/>
<xsl:with-param name="replace" select="$BodyText"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<!-- Replacement template function for XSLT 1.0 -->
<xsl:template name="replace">
<xsl:param name="text"/>
<xsl:param name="search"/>
<xsl:param name="replace"/>
<xsl:choose>
<xsl:when test="contains($text, $search)">
<xsl:variable name="replace-next">
<xsl:call-template name="replace">
<xsl:with-param name="text" select="substring-after($text, $search)"/>
<xsl:with-param name="search" select="$search"/>
<xsl:with-param name="replace" select="$replace"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat(substring-before($text, $search),$replace, $replace-next)"/>
</xsl:when>
<xsl:otherwise>
<span class="tabspan">
<xsl:value-of select="$text"/>
</span>
</xsl:otherwise>
</xsl:choose>
Однако, независимо от того, как я изменяю код, элементы span либо отсутствуют в выводе (если я пытаюсь назначить его с помощью переменной xsl: как указано выше), либо неправильно конвертируют экранированные символы XML, представляющие угловые скобки
>
<
Несмотря на странное преобразование
"
До кавычки. Я, по общему признанию, смущен и не знаю достаточно о XSLT 1.0. XSLT 2.0, 3.0 и EXSLT не являются опцией из-за ограничений конвертирующей системы.