<DENSITY UNITS='(Earth = 1)'>.943</DENSITY>
<DISTANCE UNITS='million miles'>66.8</DISTANCE><!--B перигелии-- >
</PLANET>
.
.
.
Для того чтобы снова добавить эту инструкцию обработки, можно применить элемент <xsl:processing-instruction>
(листинг 6.9). Пункты type
и href
в инструкции обработки, например <?xml-stylesheettype='text/xml' href='planets.xsl'?>
, в действительности не являются атрибутами, поэтому их значения нужно устанавливать не при помощи <xsl:attribute>
, а используя простой текст.
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='xml'/>
<xsl:template match='/'>
<xsl:processing-instruction name='xml-stylesheet'>
<xsl:text>type='text/xml' href='planets.xsl'</xsl:text>
</xsl:processing-instruction>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match='@*|node()'>
<xsl:copy>
<xsl:apply-templates select='@*|node()'/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Вот результат, где инструкция обработки <?xml-stylesheet?>
снова на месте:
<?xml version='1.0' encoding='UTF-8?>
<?xml-stylesheet type='text/xml' href='planets.xsl'?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS='(Earth = 1)'>.0553</MASS>
<DAY UNITS='days'>58.65</DAY>
<RADIUS UNITS='miles'>1516</RADIUS>
<DENSITY UNITS='(Earth = 1)'>.983</DENSITY>
<DISTANCE UNITS='million miles'>43.4</DISTANCE><!--B перигелии-- >
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS UNITS='(Earth = 1)'>.815</MASS>
<DAY UNITS='days'>116.75</DAY>
<RADIUS UNITS='miles'>3716</RADIUS>
<DENSITY UNITS='(Earth = 1)'>.943</DENSITY>
<DISTANCE UNITS='million miles'>66.8</DISTANCE><!--At perihelion-- >
</PLANET>
.
.
.
Элемент <xsl:document>: создание нескольких выходных документов
В рабочем проекте XSLT 1.1 был представлен новым элемент, <xsl:document>
, предназначенный для поддержки нескольких выходных документов, — и, скорее всего, этот элемент будет добавлен в XSLT 2.0. Он имеет следующие атрибуты:
• href
(обязательный). Указывает место, в которое должен быть помещен новый документ. Устанавливается в абсолютный или относительный URI, без идентификатора фрагмента;
• method
(необязательный). Устанавливает метод вывода, используемый для создания результирующего документа. Устанавливается в «xml», «html», «text» или QName, которое не является NCName;
• version
(необязательный). Задает версию выходного документа. Устанавливается в NMTOKEN;
• encoding
(необязательный). Задает кодировку выходного документа. Устанавливается в строку;
• omit-xml-declaration
(необязательный). Принимает значения «yes» или «no» для того, чтобы пропускать или не пропускать объявление XML;
• cdata-section-elements
(необязательный). Определяет имена тех элементов, чье содержимое вы хотите вывести как разделы CDATA. Принимает значение разделенного символами- разделителями списка QName;
• doctype-public
(необязательный). Определяет открытый идентификатор, который будет использован в объявлении <!DOCTYPE>
вывода. Устанавливается в строковое значение;
• doctype-system
(необязательный). Определяет системный идентификатор, который будет использован в объявлении <!DOCTYPE>
вывода. Устанавливается в строковое значение;
• encoding
(необязательный). Задает кодировку символов. Устанавливается в строковое значение;
• indent
(необязательный). Определяет выравнивание вывода для отображения структуры вложенности. Устанавливается в «yes» или «no»;
• media-type
(необязательный). Задает тип MIME вывода. Устанавливается в строковое значение;
• standalone
(необязательный). Определяет, нужно ли включать в вывод отдельное объявление, и если да, задает его значение. Устанавливается в «yes» или «no».
Этот элемент содержит тело шаблона.
В следующем примере, основанном на упрощенной таблице стилей, я создаю в документе HTML две рамки (frame), и два HTML-документа, которые будут в них отображаться, frame1.html
и frame2.html
. Первую рамку и документ, который в ней появится, frame1.html
, я создам при помощи <xsl:document>
следующим образом (заметьте, что здесь я устанавливаю атрибут version в «1.1», поскольку мы используем возможность, входящую только в рабочий проект XSLT 1.1, но «1.1», вероятно, не будет правильным значением атрибута version
в долгосрочном периоде; если элемент <xsl:document>
будет включен в XSLT 2.0, версию