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