Выбрать главу

Как вы могли предположить, метод вывода 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), — это два элемента <xsclass="underline" for-each>: один для прохода в цикле по трем планетам и создания для каждой кнопки HTML; и один для прохода по планетам и создания для каждой функции JavaScript. В качестве имен функций JavaScript я воспользуюсь названием планет; при вызове функция выведет массу соответствующей планеты. Заметьте, что для создания нужного кода JavaScript нужно всего лишь применить элемент <xsclass="underline" value-of> для получения названий и масс планет. Я также применю два новых элемента XSLT, <xsclass="underline" element> и <xsclass="underline" attribute-set>, которые мы рассмотрим позже в этой главе, для создания нового элемента и задания для него набора атрибутов.

Листинг 6.1. Преобразование в JavaScript

<?xml version="1.0"?>

<xsclass="underline" stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsclass="underline" output method="html"/>

 <xsclass="underline" template match="/PLANETS">

  <HTML>

   <HEAD>

    <TITLE>

     The Mass Page

    </TITLE>

    <SCRIPT LANGUAGE='javascript'>

     <xsclass="underline" for-each select="PLANET">

      <xsclass="underline" text>

       function </xsclass="underline" text><xsclass="underline" value-of select="NAME"/><xsclass="underline" text>() {

        display.innerHTML = 'The mass of </xsclass="underline" text>

        <xsclass="underline" value-of select="NAME"/>

        <xsclass="underline" text> equals </xsclass="underline" text>

        <xsclass="underline" value-of select="MASS"/>

        <xsclass="underline" text> Earth masses.'</xsclass="underline" text>

       }

     </xsclass="underline" for-each>

    </SCRIPT>

   </HEAD>

   <BODY>

    <CENTER>

     <H1>The Mass Page</H1>

    </CENTER>

    <xsclass="underline" for-each select="PLANET">

     <P/>

     <xsclass="underline" element name="input" use-attribute-sets="attribs"/>

    </xsclass="underline" for-each>

    <P/>

    <P/>

    <DIV ID='display'></DIV>

   </BODY>

  </HTML>

 </xsclass="underline" template>

 <xsclass="underline" attribute-set name="attribs">

  <xsclass="underline" attribute name="type">BUTTON</xsclass="underline" attribute>

  <xsclass="underline" attribute name="value"><xsclass="underline" value-of select="NAME"/></xsclass="underline" attribute>

  <xsclass="underline" attribute name="onclick><xsclass="underline" value-of select="NAME"/>()</xsclass="underline" attribute>

 </xsclass="underline" attribute-set>

</xsclass="underline" 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" onclick="Mercury()">

  <P></P>

  <input type="BUTTON" value="Venus" onclick="Venus()">

  <P></P>

  <input type="BUTTON" value="Earth" onclick="Earth()">

  <P></P>

  <P></P>

  <DIV ID="display"></DIV>

 </BODY>

</HTML>

Как видите, при помощи XSLT я написал код JavaScript для прохода в цикле по планетам. Этот документ HTML показан на рис. 6.1. При щелчке на кнопку выводится масса соответствующей планеты.

Рис. 6.1. Преобразование XML в HTML при помощи JavaScript 

Метод вывода: XML