Как и в случае с методом вывода 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 должен сгенерировать ошибку.
Читать дальше