Мне действительно нужен ответ на этот вопрос. Я работаю над проектом, который использует XML для создания страниц, а затем XSLT для его создания на веб-странице. Вот пример кода:
public function transform ($xml) { $proc = new XSLTProcessor; $proc->importStyleSheet ($this->xsl); $output = $proc->transformToXML ($xml); return $output; }
$ xml содержит веб-страницу в формате XML, например:
<?xml version="1.0" encoding="utf-8"?> <page> <meta> <language>en</language> <title>Main page</title> <content> <![CDATA[ lot's of content here along with <p>html</p>. ]]> </content> </page>
Таким образом, веб-страница находится в XML и передается функции преобразования, которая загружает XSL-файл для преобразования XML в HTML-страницу. Однако приведенные выше сценарии не смогут правильно загрузить тег контента, поскольку XSLT по какой-то причине не понимает CDATA и кодирует HTML для сущностей.
Итак, вопрос в том, как я могу выводить, используя XSLT, HTML как HTML, не получая его в виде сущностей?
Я уверен, что у вас в XSLT нет ничего подобного:
<xsl:template match="content"> <xsl:value-of select="." disable-output-escaping="yes" /> </xsl:template>
XSLT «отлично понимает» CDATA. Точнее – это вообще не касается CDATA, это задача лежащего в основе XML DOM-анализатора, который делает из него текстовое значение.
С точки зрения XSLT нет способа узнать, является ли строка
"<div>bla & bla</div>"
вышел из
<xml><div>bla &amp; bla</div></div>
или
<xml><![CDATA[<div>bla & bla</div>]]></div>
CDATA – это просто удобство сериализации. Полученный информационный набор / DOM тот же . И если вы не отключите выходное экранирование, XSLT правильно выдает следующее значение из приведенной выше строки:
<div>bla &amp; bla</div>
В чем причина того, что вы видите HTML-код на отображаемой странице.
Посмотрите, поможет ли это . Я бы добавил больше в ответ, но я думаю, что ссылка лучше справляется с объяснением того, как добиться такого результата преобразования из XSLT с помощью LexEv XMLReader, который является оболочкой для стандартного XMLReader, используемого XSLT и Saxon.