Судя по Гуглу, довольно часто возникает вопрос о специальных символах — кавычках ("
, «
, »
), амперсанде (&
) и других — при XSL-преобразовании из XML в HTML.
В чем суть проблемы? Предположим, у нас есть некий XML-файл, содержащий что-то вроде
<title>&laquo;Доктор Хаус&raquo; &mdash; сколько всего сезонов снято?</title>
Здесь по обеим сторонам от доктора Хауса стоят кавычки-елочки, а после — длинное тире. Понятно, что в XML нельзя хранить знак амперсанда непосредственно, поэтому этот специальный символ кодируется в виде сущности. И вот, теперь мы хотим преобразовать это в HTML. В нашем XSL-файле есть такой фрагмент:
<xsl:value-of select="title"/>
Что мы получим? Не совсем то, что хотим: содержимое скопируется как есть, и кавычек мы не увидим. Решение в данном случае очень простое:
<xsl:value-of select="title" disable-output-escaping="yes"/>
Атрибут disable-output-escaping="yes"
указывает, что специальные символы должны извлекаться «как есть», без кодирования в сущности.
Результат:
«Доктор Хаус» — сколько всего сезонов снято?