XSLT - сохранение отключения-вывода-экранирования в копии - PullRequest
3 голосов
/ 04 июля 2011

Кажется, у меня проблема с сохранением disable-output-escaping при использовании этого значения внутри xsl:copy-of.

Вот мой код:

<xsl:call-template name="Display">
    <xsl:with-param name="text">
        <xsl:value-of select="content" disable-output-escaping="yes" />
    </xsl:with-param>
</xsl:call-template>

<xsl:template name="Display">
    <xsl:param name="text" />
    <span><xsl:copy-of select="$text" /></span>
</xsl:template>

Все специальные символы, которые были сохранены как есть из оператора xsl:value-of, экранируются, когда они используются в операторе xsl:copy-of.

Например:

<xsl:value-of select="$text" disable-output-escaping="yes"> отобразит это: è

<xsl:copy-of select="$text"> отобразит &#232

Я хотел бы знать, еслиесть ли способ обойти это?

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Согласно спецификации, атрибут disable-output-escaping может быть указан только в инструкциях <xsl:value-of> и <xsl:text>.

DOE требуется только для инструкции xslt, которая фактически выводит значение, а не для инструкции, устанавливающей значение параметра.

Решение

Заменить:

<span><xsl:copy-of select="$text"/></span>

с:

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

Заметьте : Как правило, следует избегать использования DOE, поскольку это нарушает архитектурную модель XSLT и обычно не требуется. Кроме того, функция DOE не является обязательной, и не все процессоры XSLT 1.0 поддерживают ее.

Примечание 2 : На самом деле вам вообще не нужен DOE. Вывод преобразования XSLT должен отображаться браузером, как и ожидалось.

0 голосов
/ 04 июля 2011

disable-output-escaping контролирует действие сериализатора при передаче текстового узла. Это бессмысленно, когда текстовый узел не передается сериализатору, например, когда он добавляется во временное дерево.

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