XSL-преобразование из XML в HTML: специальные символы

Судя по Гуглу, довольно часто возникает вопрос о специальных символах — кавычках (", «, »), амперсанде (&) и других — при XSL-преобразовании из XML в HTML.

В чем суть проблемы? Предположим, у нас есть некий XML-файл, содержащий что-то вроде

<title>&amp;laquo;Доктор Хаус&amp;raquo; &amp;mdash; сколько всего сезонов снято?</title>

Здесь по обеим сторонам от доктора Хауса стоят кавычки-елочки, а после — длинное тире. Понятно, что в XML нельзя хранить знак амперсанда непосредственно, поэтому этот специальный символ кодируется в виде сущности. И вот, теперь мы хотим преобразовать это в HTML. В нашем XSL-файле есть такой фрагмент:

<xsl:value-of select="title"/>

Что мы получим? Не совсем то, что хотим: содержимое скопируется как есть, и кавычек мы не увидим. Решение в данном случае очень простое:

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

Атрибут disable-output-escaping="yes" указывает, что специальные символы должны извлекаться «как есть», без кодирования в сущности.

Результат:

«Доктор Хаус» — сколько всего сезонов снято?