Top of Form
Bottom of Form |
|||||||||||||
|
|||||||||||||
2 |
Top of Form
Bottom of Form |
||||||||||||
|
|
3 |
Top of Form
Bottom of Form |
||||||||||||
|
|
||||||||||||
4 |
Top of Form
Bottom of Form |
||||||||||||
|
|
5 |
Top of Form
Bottom of Form |
||||||||||
|
|
||||||||||
6 |
Top of Form
Bottom of Form |
||||||||||
|
|
7 |
Top of Form
Bottom of Form |
||||||||||||
|
|
||||||||||||
8 |
Top of Form
Bottom of Form |
||||||||||||
|
|
9 |
Top of Form
Bottom of Form |
||||||||||||
|
|
||||||||||||
10 |
Top of Form
Bottom of Form |
||||||||||||
|
|
11 |
Top of Form
Bottom of Form |
||||||||||||
|
|
||||||||||||
12 |
Top of Form
Bottom of Form |
||||||||||||
|
|
13 |
Top of Form
Bottom of Form |
||||||||||
|
|
||||||||||
14 |
Top of Form
Bottom of Form |
||||||||||
|
|
15 |
Top of Form
Bottom of Form |
Ошибки:
7 вопрос:
-
Быстрые соединения
-
Дополнительное вебпространство
-
Дополнительные профили электронной почты
21 вопрос:
Переход или хоб
10 вопрос:
Что обеспечивает соблюдение стандартов прокладки кабелей
Надежность передачи данные
Тест 5
Ошибки:
Вот полное описание шаблона из рассматриваемой таблицы стилей:
<xsl:template match="/">
<H2>Book Description</H2>
<SPAN STYLE="font-style:italic">Author: </SPAN>
<xsl:value-of select="BOOK/AUTHOR"/><BR/>
<SPAN STYLE="font-style:italic">Title: </SPAN>
<xsl:value-of select="BOOK/TITLE"/><BR/>
<SPAN STYLE="font-style:italic">Price: </SPAN>
<xsl:value-of select="BOOK/PRICE"/><BR/>
<SPAN STYLE="font-style:italic">Binding type: </SPAN>
<xsl:value-of select="BOOK/BINDING"/><BR/>
<SPAN STYLE="font-style:italic">Number of pages: </SPAN>
<xsl:value-of select="BOOK/PAGES"/>
</xsl:template>
Шаблон содержит два вида XML-элементов.
-
XML-элементы, представляющие HTML-разметку. Примерами подобного вида XML-элемента из рассматриваемой таблицы стилей являются:
<H2>Book Description</H2>
который отображает заголовок второго уровня,
<SPAN STYLE="font-style:italic">Author: </SPAN>
который отображает блок текста, набранного курсивом (Author:), и
<BR/>
который создает пустую строку.
Все эти XML-элементы являются корректно сформированными и представляют стандартные HTML-элементы. Браузер просто копирует каждый HTML-элемент непосредственно на выход HTML, который воспринимает и отображает их.
Подсказка. Каждый из элементов, представляющих HTML-разметку, должен быть корректно сформированным XML-элементом, а также стандартным HTML-элементом. (Не забывайте, что XSL-таблица стилей является XML-документом.) Следовательно, вы не можете использовать HTML-конструкции, которые не являются корректно сформированным XML, такие, как элементы, состоящие только из начального тега. Например, чтобы задать элемент перевода строки в HTML, вы не можете просто ввести <BR>, как вы это делаете для HTML-страницы. Вместо этого вы должны использовать корректно сформированный тег пустого XML-элемента, <BR/>.
-
XSL-элементы. Примерами XSL-элементов из рассматриваемой таблицы стилей являются элементы xsl:value-of, например:
<xsl:value-of select="BOOK/AUTHOR"/>
Браузер отличает XSL-элемент от элемента, представляющего HTML, поскольку первый имеет в качестве префикса описание пространства именxsl:. XSL-элементы в шаблоне не копируются на выход HTML. Они лишь содержат инструкции по выбору и модификации данных XML, либо используются для выполнения других задач.
XSL-элемент value-of добавляет текстовое содержимое определенного XML-элемента – а также любых его дочерних элементов, которые он имеет – в выходной модуль HTML, который воспринимается и отображается браузером. Вы указываете определенный XML-элемент заданием образца, который присваиваете атрибуту select XSL-элемента value-of. В рассмотренном выше примере элемента value-of атрибуту select присвоен образец "BOOK/AUTHOR", что приводит к выводу текстового содержимого элемента AUTHOR XML-документа. Текстовое содержимое элемента AUTHORсостоит из символьных данных, принадлежащих двум его дочерним элементам, FIRSTNAME и LASTNAME.
Обратите внимание, что XML-элемент в образце задается с помощью оператора пути (в данном случае BOOK/AUTHOR ), который определяет местонахождение элемента в иерархии XML-документа. (Оператор пути аналогичен пути к файлу, который операционная система использует для указания местонахождения файла или папки.)
Главный момент, на который здесь следует обратить внимание, состоит в том, что оператор пути в значении атрибута select относится к текущему элементу. Каждый контекст внутри XSL-таблицы стилей относится к текущему элементу. Поскольку рассматриваемый пример шаблона относится к корневому элементу всего документа (посредством установки атрибута match="/" ), текущим "элементом" для данного шаблона является корневой элемент документа. (В данном случае текущий элемент не обладает соответствующим литералом, а является родителем элемента Документ.) Таким образом, внутри этого шаблона оператор пути BOOK/AUTHOR указывает на элемент AUTHOR, вложенный в элемент BOOK, вложенный в корневой элемент документа. (Оператор пути в значении атрибута select аналогичен неполному пути к файлу, задающему местонахождение файла относительно текущей рабочей папки.)
Если вы опустите атрибут select для XSL-элемента value-of, элемент будет осуществлять вывод текстового содержимого плюс текстовое содержимое всех дочерних элементов текущего элемента. (В нашем примере, поскольку текущим является корневой элемент, пропуск атрибутаselect приведёт к выводу всех символьных данных XML-документа.)
Целью представленного в рассматриваемом примере шаблона элементов является отображение текста названия для каждого из дочерних XML-элементов в документе ( AUTHOR, TITLE, PRICE, BINDING и PAGES ) плюс текстового содержимого каждого элемента. Обратите внимание, что порядок элементов value-of в шаблоне определяет порядок, в котором браузер отображает эти элементы. Таким образом, даже из этой простой таблицы стилей вы можете понять, что XSL-таблица стилей является гораздо более гибкой, чем CSS, которая всегда отображает элементы в том порядке, в котором они следуют в документе.
Итак, как вы могли заметить, XSL-таблица стилей сообщает браузеру, как отобразить XML-документ путем избирательного преобразования XML-элементов в блок HTML-разметки, который воспринимается и отображается браузером аналогично разметке, содержащейся на HTML-странице. Заметим, однако, что вам не нужно включать в XSL-шаблон элементы, представляющие элементы HTML или BODY, которые являются стандартными составными частями HTML-страницы, поскольку браузер сам эффективно их формирует.
На рисунке 10.2 показано как браузер генерирует первую часть блока HTML-разметки для документа и таблицы стилей из Листингов 10.1 и 10.2.
Рис. 10.2.
XML-документ
<AUTHOR>
<FIRSTNAME>Herman</FIRSTNAME
<LASTNAME>Melville</LASTNAME>
</AUTHOR>
XSL-таблица стилей
<H2>Book Description</H2>
<SPAN STYLE="font-style:italic">Author: </SPAN>
<xsl:value-of select="BOOK/AUTHOR"/><BR/>
Отображаемый HTML
<H2>Book Description</H2>
<SPAN STYLE="font-style:italic">Author: </SPAN>
Hermann Melville
Ссылка. Для получения более подробной информации о работе с HTML и динамическим HTML (DHTML) в Internet Explorer 5, обратитесь к следующему Web-сайту, предоставленному MSDN: http://msdn.microsoft.com/workshop/author/default.asp. Если вы хотите познакомиться с официальной спецификацией HTML, обратитесь к следующему Web-сайту, предоставленномуW3C: http://www.w3.org/TR/REC-html40/.
Отображение переменного числа элементов
В примере, рассмотренном в предыдущем разделе (см. Листинг 10.2), XML-документ содержал только один элемент BOOK. В случае, если документ содержит несколько элементов BOOK, методика, с которой вы познакомились в предыдущем разделе, способна отобразить только один из элементов. Возьмем, для примера, XML-документ, содержащий следующий элемент Документ:
<INVENTORY>
<BOOK>
<TITLE>The Adventures of Huckleberry Finn</TITLE>
<AUTHOR>
<FIRSTNAME>Mark</FIRSTNAME>
<LASTNAME>Twain</LASTNAME>
</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK>
<TITLE>The Adventures of Tom Sawyer</TITLE>
<AUTHOR>
<FIRSTNAME>Mark</FIRSTNAME>
<LASTNAME>Twain</LASTNAME>
</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>205</PAGES>
<PRICE>$4.75</PRICE>
</BOOK>
<BOOK>
<TITLE>The Ambassadors</TITLE>
<AUTHOR>
<FIRSTNAME>Henry</FIRSTNAME>
<LASTNAME>James</LASTNAME>
</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>305</PAGES>
<PRICE>$5.95</PRICE>
</BOOK>
</INVENTORY>
Предположим, что таблица стилей, используемая для отображения этого документа, содержит следующий шаблон:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<H2>Book Description</H2>
<SPAN STYLE="font-style:italic">Author: </SPAN>
<xsl:value-of select="INVENTORY/BOOK/AUTHOR"/><BR/>
<SPAN STYLE="font-style:italic">Title: </SPAN>
<xsl:value-of select="INVENTORY/BOOK/TITLE"/><BR/>
<SPAN STYLE="font-style:italic">Price: </SPAN>
<xsl:value-of select="INVENTORY/BOOK/PRICE"/><BR/>
<SPAN STYLE="font-style:italic">Binding type: </SPAN>
<xsl:value-of select="INVENTORY/BOOK/BINDING"/><BR/>
<SPAN STYLE="font-style:italic">Number of pages: </SPAN>
<xsl:value-of select="INVENTORY/BOOK/PAGES"/>
</xsl:template>
</xsl:stylesheet>
Этот шаблон использует методику, описанную в предыдущем разделе. Обратите внимание, что образец присваиваемых каждому атрибуту selectначинается с указания элемента Документ, в данном случае INVENTORY (например, "INVENTORY/BOOK/AUTHOR" ).
Каждый образец, однако, соответствует трем различным элементам. Например, "INVENTORY/BOOK/AUTHOR" соответствует элементу AUTHOR для всех трех элементов BOOK. В подобной ситуации браузер использует только первый из соответствующих элементов. Таким образом, таблица стилей отобразит содержимое только первого элемента BOOK, как показано на рисунке 10.3.
Рис. 10.3.
Чтобы отобразить все отвечающие образцу элементы, следует использовать XSL-элемент for-each, который вызывает повторный вывод для каждого из содержащихся в XML-файле элементов. XSL-таблица стилей, представленная в Листинге 10.3, демонстрирует данную методику. Эта таблица стилей связана с XML-документом, содержащимся в Листинге 10.4.
<?xml version="1.0"?>
<!-- File name: XslDemo02.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<H2>Book Inventory</H2>
<xsl:for-each select="INVENTORY/BOOK">
<SPAN STYLE="font-style:italic">Title: </SPAN>
<xsl:value-of select="TITLE"/><BR />
<SPAN STYLE="font-style:italic">Author: </SPAN>
<xsl:value-of select="AUTHOR"/><BR />
<SPAN STYLE="font-style:italic">Binding type: </SPAN>
<xsl:value-of select="BINDING"/><BR />
<SPAN STYLE="font-style:italic">Number of pages: </SPAN>
<xsl:value-of select="PAGES"/><BR />
<SPAN STYLE="font-style:italic">Price: </SPAN>
<xsl:value-of select="PRICE"/><P />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>