Как и в случае с методом вывода HTML, если атрибут indent
установлен в «yes», метод вывода XML может добавить или удалить символы-разделители в результирующее дерево для того, чтобы выровнять результат. Значение по умолчанию — no. Заметьте, что если символы-разделители отбрасываются, информационное множество результирующего XML-документа должно быть таким же, как если бы символы-разделители вообще не добавлялись и не удалялись для выравнивания документа.
ВЫРАВНИВАНИЕ ДОКУМЕНТОВ СО СМЕШАННЫМ СОДЕРЖИМЫМ
Для документов со смешанным содержимым лучше не устанавливать атрибут indent в «yes», поскольку это вносит путаницу в работу процессора XSLT.
При помощи атрибута cdata-section-elements
можно задать разделенный символами-разделителями список имен элементов, чье содержимое должно трактоваться как разделы CDATA
. Например, если установить атрибут cdata-section-elements
в « DATA
»:
то следующий элемент буквального результата:
<:DOCUMENT>
будет преобразован в:
]]>
Кроме того, метод вывода XML будет выводить в результирующий документ объявление XML, если только атрибут omit-xml-declaration
не будет установлен в yes
. Как правило, объявление XML, помещаемое в результирующий документ, обычно включает версию XML (что обязательно) и информацию о кодировке (хотя формально информация о кодировке в документах XML не обязательна). Если задан атрибут standalone
, результирующий документ должен включать объявление отдельного документа с тем же значением, что и значение у атрибута standalone
.
При использовании атрибута doctype-system
процессор создает объявление типа документа непосредственно перед первым элементом. В этом случае имя, следующее за , будет именем корневого элемента. Заметьте, что если вы также используете атрибут doctype-public
, процессор XSLT выведет « PUBLIC
», вслед за ним открытый идентификатор и затем системный идентификатор. Если вы не используете атрибут doctype-public
, процессор выведет « SYSTEM
» и вслед за ним системный идентификатор. Теоретически атрибут doctype-public
должен игнорироваться, если не задан также атрибут doctype-system
, хотя большинство процессоров, кажется, не следуют этому правилу. Мы увидим, как работать с атрибутами doctype-public
и doctype-system
в этой главе при преобразовании XML в XHTML.
Наконец, для метода вывода XML значением по умолчанию для атрибута media-type
является « text/xml
».
Вы уже встречали в этой книге многие XML-XML преобразования. Например, преобразование из главы 4 просто копировало один документ XML в другой. Обратите внимание на метод вывода, который установлен в XML:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Этот пример был приведен в начале главы, в нем planets.xml
реорганизован на основе плотности планет:
.983
Mercury
.0553
58.65
1516
.943
Venus
.815
116.75
3716
1
Earth
1
1
2107
Вот таблица стилей (листинг 6.3), создающая это преобразование.
Листинг 6.3. Реорганизация planets.xml на основе плотности
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Следующий пример впервые был приведен в главе 5. В этом случае я только перечислил планеты из planets.xml
, но в выходном документе я хотел видеть не просто фразу «The first three planets are: Mercury Venus Earth» (первые три планеты: Меркурий Венера Земля), a «The first three planets are: Mercury, Venus, and Earth.». Для этого я применил элементы :
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets
The first three planets are:
.
and
.
И вот результат:
The Planets
The first three planets are: Mercury, Venus, and Earth.
Хотя многие книги рассматривают главным образом преобразования из XML в HTML, важно понять, что преобразования XML-XML завоевывают все большую популярность, поэтому на них я также останавливаю ваше внимание.
Этот метод вывода представляет простой текст. В данном случае выходной документ являет собой только простой текст дерева документа. То есть процессор XSLT создает результирующее дерево, выводя строковое значение каждого текстового узла, без каких-либо сокращений.
Значением по умолчанию для атрибута media-type
является « text/plain
». Атрибут encoding
устанавливает кодировку, используемую процессором XSLT для преобразования последовательностей символов в последовательности байтов. Заметьте, что если результирующий документ содержит символ, который не может быть представлен в выходной кодировке, процессор XSLT должен сгенерировать ошибку.
Читать дальше