Как перевести на HTML-код («& что-то;») - PullRequest
0 голосов
/ 16 августа 2011

Я пытаюсь перевести символ в его HTML-код, например, ' в ’ с этим кодом:

<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="test">&rsquo;</xsl:variable>

<xsl:value-of select='translate(title, $apos, $test)' />

Это работает:

<xsl:variable name="test">&#39;</xsl:variable>

НоМожно ли заставить первый пример работать?

Ответы [ 2 ]

3 голосов
/ 16 августа 2011

&rsquo; является сущностью HTML, тогда как XSLT написан с использованием XML, в котором определены только 5 сущностей. См. Страницу Википедии по сущностям XML / HTML .

Вы можете использовать DOCTYPE для добавления объектов HTNML, чтобы синтаксический анализатор XML, анализирующий ваш XSLT, мог понимать такие вещи, как &rsquo;, см. Следующие примеры:

http://www.quackit.com/xml/tutorial/xml_creating_entities.cfm

1 голос
/ 16 августа 2011

Вы можете использовать рекурсию в XSLT 1.0:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <xsl:variable name="apos">'</xsl:variable>
        <xsl:variable name="test">&amp;rsquo;</xsl:variable>
        <xsl:variable name="input">'sfdds'</xsl:variable>

        <xsl:variable name="result">
            <xsl:call-template name="replace">
                <xsl:with-param name="input" select="$input"/>
                <xsl:with-param name="value" select="$apos"/>
                <xsl:with-param name="replacement" select="$test"/>
            </xsl:call-template>
        </xsl:variable>

        <xsl:value-of select="$result" disable-output-escaping="yes"/>

    </xsl:template>


    <xsl:template name="replace">
        <xsl:param name="input"/>
        <xsl:param name="value"/>
        <xsl:param name="replacement"/>

        <xsl:choose>
            <xsl:when test="contains($input, $value)">
                <xsl:value-of select="substring-before($input, $value)"/>
                <xsl:value-of select="$replacement"/>
                <xsl:call-template name="replace">
                    <xsl:with-param name="input" select="substring-after($input, $value)"/>
                    <xsl:with-param name="value" select="$value"/>
                    <xsl:with-param name="replacement" select="$replacement"/>
                </xsl:call-template>
            </xsl:when>

            <xsl:otherwise>
                <xsl:value-of select="$input"/>
            </xsl:otherwise>
        </xsl:choose>

    </xsl:template>

</xsl:stylesheet>

Выход:

&rsquo;sfdds&rsquo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...