Оператор output — он отвечает за формирование выходного потока. Т.е. он объясняет процессору, что надо сделать на выходе.
Поскольку этот оператор настраивает все преобразование глобально, он используется не в шаблонах xsl, а находится на уровне самой таблицы преобразования. Обычно это идет один из самых первых операторов (в файле таблицы преобразования).
Разберем атрибуты оператора output, которые управляют выходом:
<xsl:output method="xsml|html|text|name" version="string" encoding="string" omit-xml-declaration="yes|no" standalone="yes|no" doctype-public="string" doctype-system="string" cdata-section-elements="namelist" indent="yes|no" media-type="string"/>
- method — главный атрибут, показывает, что должен сделать процессор. Стандартные процессоры поддерживают 3 метода: xml, html, text. Но встречаются экзотические процессоры, которые могут расширять этот набор (например, метод pdf — на выход дает файл pdf). Метод text — выдает на выходе только текстовые узлы, все теги убираются.
- version — имеет смысл только при методе xml. Показывает текущую версию xml. Например, xml version=»1.0″
- encoding — кодировка выходного потока. Почти все xml парсеры работают с любой кодировкой, т.е. прочитать входной документ в любой кодировке сможет любой парсер. Но не все парсеры смогут перекодировать выход в нужную кодировку. Дело в том, что в xml в DOM парсере понятия ‘кодировки’ нет. Любой парсер работает внутри себя на какой-то своей кодировке, всегда на одной (например, парсер php работает на кодировке utf-8, ms sql — на utf-16). В итоге, какую бы мы не указывали кодировку парсеру, он сначала перекодирует входной документ в себя и построит dom модель.
- omit-xml-declaration — подавляет вывод xml декларации. Смысл имеется только в том случае, если вы выводите метод xml.
- standalone — документ самодостаточный или нет.
- doctype-public, doctype-system — позволяет при необходимости в xml и html сделать ссылку на DTD. В документе прописывается в начале: ‘!Doctype html Public’.
- cdata-section-elements. Иногда в процессе преобразования документа может показаться, что в какие-то теги попали запрещенные символы. Для перестраховки в этом элементе мы указываем те теги выходного файла, в которых могут быть запрещенные символы. Данный метод работает только в xml документе.
- indent — делать отступы в выходном потоке или все писать в одну строчку.
- media-type — предназначен для браузеров, показывает какого-типа контент формируется. Этот метод сейчас почти не используется.
Формирование различных выходных файлов
Рассмотрим стандартные настройки для формировании выходного файла форматов — text, xml, html.
Простой текст:
<xsl:output method="text" encoding="utf-8"/>
Html файл:
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes"/>
XML файл:
<xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/1999/xhtml" indent="yes">