Книга: XSLT
Метод вывода: HTML
Разделы на этой странице:
Метод вывода: HTML
Для метода вывода HTML процессор XSLT должен предпринять определенные действия. Например, для этого метода атрибут version
определяет версию HTML. Значение по умолчанию — 4.0.
Этот метод не должен добавлять завершающий тег для пустых элементов. (Для HTML 4.0 пустыми элементами являются <AREA>
, <BASE>
, <BASEFONT>
, <BR>
, <COL>
, <FRAME>
, <HR>
, <IMG>
, <INPUT>
, <ISINDEX>
, <LINK>
, <META>
и <PARAM>
.) Метод вывода HTML должен распознавать названия элементов HTML независимо от регистра.
В соответствии с W3C, метод вывода HTML не должен скрывать содержимое элементов <SCRIPT>
или <STYLE>
. Например, следующий элемент буквального результата:
<SCRIPT>
if (х < у) {...}
</SCRIPT>
или следующий, использующий раздел CDATA:
<SCRIPT>
<![CDATA[if (х < у) {...}]]>
</SCRIPT>
должен быть преобразован в:
<SCRIPT>
if (х < у) {...}
</SCRIPT>
Метод вывода HTML не должен также подавлять символы <, встречающиеся в значениях атрибутов.
При установке метода вывода в HTML процессор может учесть атрибут выравнивания. Если этот атрибут установлен в yes
, процессор XSLT может добавить (или удалить) символы-разделители для выравнивания результирующего документа, поскольку это не влияет на отображение документа в браузере. Для метода вывода HTML значением по умолчанию является «yes».
Как вы могли предположить, метод вывода HTML завершает инструкции обработки при помощи >
, а не ?>
, а также поддерживает отдельные атрибуты, как и HTML. Например, тег
<TD NOWRAP="NOWRAP">
будет преобразован в:
<TD NOWRAP>
Для этого метода можно установить атрибут media-type
, значением по умолчанию для которого является «text/html
». Метод HTML не должен убирать символ &, который появляется в значении атрибута, если сразу за ним следует фигурная скобка. Атрибут encoding
задает используемую кодировку. Если присутствует элемент <HEAD>
, этот метод вывода должен добавить элемент <МЕТА>
сразу же после тега <HEAD>
, определяя кодировку символов:
<HEAD>
<МЕТА http-equiv="Content-Type" content="text/html; charset=utf-8">
.
.
.
При помощи атрибутов doctype-public
или doctype-system
можно вывести объявление типа документа непосредственно перед первым элементом, как мы увидим при преобразовании XML в XHTML.
Таковы правила вывода HTML. Ниже приведен пример преобразования из XML в HTML с небольшими отклонениями. В этом случае таблица стилей будет фактически генерировать код JavaScript, демонстрируя создание JavaScript при помощи XSLT. В частности, мы прочитаем planets.xml
и создадим новый документ HTML, отображающий три кнопки — по одной для каждой из трех планет в planets.xml
. При щелчке на кнопке на странице будет выведена масса соответствующей планеты.
Все, что нам понадобится (листинг 6.1), — это два элемента <xsl:for-each>
: один для прохода в цикле по трем планетам и создания для каждой кнопки HTML; и один для прохода по планетам и создания для каждой функции JavaScript. В качестве имен функций JavaScript я воспользуюсь названием планет; при вызове функция выведет массу соответствующей планеты. Заметьте, что для создания нужного кода JavaScript нужно всего лишь применить элемент <xsl:value-of>
для получения названий и масс планет. Я также применю два новых элемента XSLT, <xsl:element>
и <xsl:attribute-set>
, которые мы рассмотрим позже в этой главе, для создания нового элемента и задания для него набора атрибутов.
Листинг 6.1. Преобразование в JavaScript
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
<TITLE>
The Mass Page
</TITLE>
<SCRIPT LANGUAGE='javascript'>
<xsl:for-each select="PLANET">
<xsl:text>
function </xsl:text><xsl:value-of select="NAME"/><xsl:text>() {
display.innerHTML = 'The mass of </xsl:text>
<xsl:value-of select="NAME"/>
<xsl:text> equals </xsl:text>
<xsl:value-of select="MASS"/>
<xsl:text> Earth masses.'</xsl:text>
}
</xsl:for-each>
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<H1>The Mass Page</H1>
</CENTER>
<xsl:for-each select="PLANET">
<P/>
<xsl:element name="input" use-attribute-sets="attribs"/>
</xsl:for-each>
<P/>
<P/>
<DIV></DIV>
</BODY>
</HTML>
</xsl:template>
<xsl:attribute-set name="attribs">
<xsl:attribute name="type">BUTTON</xsl:attribute>
<xsl:attribute name="value"><xsl:value-of select="NAME"/></xsl:attribute>
<xsl:attribute name="onclick><xsl:value-of select="NAME"/>()</xsl:attribute>
</xsl:attribute-set>
</xsl:stylesheet>
Результат, включая элемент <SCRIPT>
для нового кода JavaScript (листинг 6.2).
Листинг 6.2. Результирующий документ с JavaScript
<HTML>
<HEAD>
<TITLE>
The Mass Page
</TITLE>
<SCRIPT LANGUAGE="javascript">
function Mercury() {
display.innerHTML =
'The mass of Mercury equals .0553 Earth masses.'
}
function Venus() {
display.innerHTML = 'The mass of Venus equals .815 Earth masses.'
}
function Earth() {
display.innerHTML = 'The mass of Earth equals 1 Earth masses.'
}
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<H1>The Mass Page</H1>
</CENTER>
<P></P>
<input type="BUTTON" value="Mercury">
<P></P>
<input type="BUTTON" value="Venus">
<P></P>
<input type="BUTTON" value="Earth">
<P></P>
<P></P>
<DIV></DIV>
</BODY>
</HTML>
Как видите, при помощи XSLT я написал код JavaScript для прохода в цикле по планетам. Этот документ HTML показан на рис. 6.1. При щелчке на кнопку выводится масса соответствующей планеты.

Рис. 6.1. Преобразование XML в HTML при помощи JavaScript
- Параметры вывода текста
- Выбор методов вывода
- Метод вывода "text"
- Метод вывода: XML
- Метод вывода "html"
- Включение и отключение синхронного вывода
- 2. Правила вывода Армстронга
- 3. Производные правила вывода
- 1.6 Драйверы и буферы ввода-вывода
- Глава 6 BIOS – базовая система ввода-вывода
- Применение PHP-технологий в программе HtmlPad
- Модульный HTML