XSLT отключает экранирование выхода, когда не поддерживается отключение-выход-экранирование - PullRequest
0 голосов
/ 15 июня 2010

Поскольку отключение-вывод-экранирование не работает в Firefox (и не будет), каков следующий лучший способ включения необработанной разметки в выходные данные преобразования XSTL?

(Справочная информация: у меня есть необработанный HTML-код в базе данных, который я хочу обернуть в XML для отправки в браузер для рендеринга. У меня есть контроль над XML и таблицей стилей, но нет контроля над HTML, который может быть плохо сформирован (даже для HTML!))

Спасибо

Ответы [ 2 ]

1 голос
/ 15 июня 2010

Вы можете поместить оскорбительный текст в раздел CDATA .

Например, это правильно оформленный документ XML:

<t><![CDATA[M & M < sufficient]]></t>

Вот преобразование XSLT, который помещает текстовые узлы выбранных элементов (<t>) в секции CDATA:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes" />
 <xsl:output cdata-section-elements="t"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

</xsl:stylesheet>

Результат:

<t><![CDATA[M & M < sufficient]]></t>

Без инструкции <xsl:output cdata-section-elements="t"/> результат будет:

<t>M &amp; M &lt; sufficient</t>
0 голосов
/ 15 июня 2010

XSLT - это не разметка, это дерево.

В XSLT1 вы не можете использовать некорректный ввод.В XSLT2 вы можете, но вы, конечно, теряете навигацию по xpath.

Таким образом, без механизма «disable-output-escaping» вы не сможете вывести возможное искаженное дерево.И это особенность!

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