Содержание
Элемент верхнего уровня xsl:output позволяет указать, как должно быть выведено конечное дерево. Данный элемент позволяет определить ряд особенностей, свойственных тому или иному методу вывода.
Синтаксис:
1 2 3 4 5 6 7 8 9 10 11 | <xsl:output method = "xml|html|text|другой_метод" version = "версия" encoding = "кодировка" omit-xml-declaration = "yes|no" standalone = "yes|no" doctype-public = "строка" doctype-system = "URI" cdata-section-elements = "элементы" indent = "yes|no" media-type = "строка" /> |
Атрибуты:
method
– главный (но не обязательный) атрибут элемента. Он определяет, каким методом должен быть выведен конечный документ. Значением атрибута может быть любое имя, но спецификация XSL определяет только три метода вывода:xml
,html
,text
. Другие методы вывод могут использоваться, но их поддержка зависит от xslt-процессора. Если стиль не содержит элементаxsl:output
или у этого элемента не задан атрибутmethod
метод вывода выбирается по умолчанию по следующим правилам:- если корневым элементом конечного дерева является элемент
html
(и ему предшествуют только пробельные символы), методом вывода по умолчанию будетhtml
- в остальных случаях методом вывод по умолчанию будет
xml
- если корневым элементом конечного дерева является элемент
version
– определяет версию языка конечного документаindent
– определяет следует ли в конечное дерево добавлять пробельные символы для более наглядного форматирования документ. Атрибут может иметь два значения:yes
– разрешает добавлять пробельные символы иno
– запрещает добавлять пробельные символы. Как именно будет форматироваться конечный докумен зависит от XSLT-процессора. Как правило, дочерние элеменеты переносятся на новую строку и на каждый уровень вложенности добавляется по два пробела.encoding
– определяет кодировку конечного документаmedia-type
– определяет тип содержимого MIME конечного документа.doctype-system
– позволяет задать системный идентификатор DTD. Его значением является URI (путь до файла) DTD-файла. В конечном документе это создаст определение такого вида:1<!DOCTYPE корневой_элемент SYSTEM "путь_до_DTD-файла">doctype-public
– позволяет задать публичный идентификатор DTD. В конечном документе это создаст определение такого вида:1<!DOCTYPE корневой_элемент PUBLIC "публичный_идентификатор" "путь_до_DTD-файла">omit-xml-declaration
– определяет нужно ли включать xml-декларацию в конечный документ. Атрибут может иметь два значения:yes
– пропустить декларацию иno
– включить декларацию в конечный документ (значение по умолчанию)standalone
– определяет нужно ли выводить в xml-декларации конечного документа указание на его самостоятельность. Атрибут может иметь два значения:yes
– выводить указание иno
– не выводить указаниеcdata-section-elements
– определяет список элементов, текстовое содержимое которых должно быть выведено с использованием секции CDATA (<![CDATA[...]]>
)
Результат от использования этих атрибутов во многом зависит от выбранного метода.
Метод xml
При использовании данного метода конечный документ будет xml-документом.
Остальные атрибуты дадут следующий результат:
version
– определяет версию языка XML. В настоящее время единственной поддерживаемой версией является версия1.0
; ее и следует указывать. При этом значение1.0
является значением по умолчанию, и если атрибут version опустить результат будет таким же. В конечном документе версия будет указана в декларации XML:1<?xml version="1.0" encoding="UTF-8"?>encoding
– определяет кодировку конечного документа. Значением по умолчанию как правило выступаетutf-8
. Перечень поддерживаемых кодировок зависит от xslt-процессора. В конечном документе версия будет указана в декларации XML:1<?xml version="1.0" encoding="UTF-8"?>media-type
– задает медиа-тип содержимого конечного документа. По умолчанию для методаxml
это будетtext/xml
.
Метод html
При использовании этого метода конечный документ будет валидным html-документом. Метод вывода html
имеет следующие ключевые особенности:
- Пустые HTML-элементы выводятся без косой черты (т.е. не
<тег/
>, а<тег>
). К пустым в соответствии с HTML 4.0 относятсяarea
,base
,basefont
,br
,col
,frame
,hr
,img
,input
,isindex
,link
,meta
иparam
. При этом регистр этих элементов не учитывается. - Внутри элементов
script
иstyle
не производится экранирование текста, т.е. даже если исходный документ содержал<![CDATA[...]]>
внутри этих элементов, в конечный документ текст включается без экранирования. Также внутри этих элементов символы относящиеся в XML к специальным (<
,&
и др.) не должны заменяться на символьные или встроенные сущности. - Булевы атрибуты (то есть те, которым разрешено иметь только одно значение — название самого атрибута) метод вывода html должен показывать в минимизированной форме. Например, начальный тэг, записанный в стиле какдолжен быть представлен в виде1<OPTION selected="selected">1<OPTION selected>
- В значении атрибута метод вывода
html
не должен маскировать символ&
, сразу за которым следует символ{
. Например, начальный тэг, записанный в стиле какдолжен быть представлен в виде1<BODY bgcolor='&{{randomrbg}};'>1<BODY bgcolor='&{randomrbg};'> - Атрибут
encoding
указывает предпочтительную кодировку. Метод выводаhtml
сразу после начального элементаhead
должен добавить элементmeta
, указывающий реально используемую кодировку символов:12<head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> - По умолчанию для метода
html
атрибутmedia-type
будет иметь значениеtext/html
. - Атрибут
version
показывает версию HTML. Значением по умолчанию является4.0
. - Метод вывода
html
не должен маскировать символы<
в значении атрибутов. - В значении атрибутов URI метод вывода
html
должен маскировать (URL-кодирование) символы, не относящиеся к набору ASCII. - Специальные символы должны заменяться на HTML-сущности.
- Инструкции обработки метод
html
должен завершать символом>
, а не комбинацией?>
.
Метод text
Метод text
выводит в конечное дерево лишь строковые значения каждого текстового узла без какого-либо экранирования.
Значением по умолчанию для атрибута media-type
будет является text/plain
.
Атрибут encoding
указывает кодировку, которую метод вывода text
должен использовать для преобразования последовательностей символов в последовательности байтов.