для прямого просмотра в Internet Explorer. Такие изменения необходимо провести для навигации непосредственно по XML-документам с таблицами XSL в этом браузере.
На этом завершается обзор работы с таблицами стилей в XSL. В следующей главе мы более подробно познакомимся с основной частью таблиц стилей — шаблонами.
Глава 3
Создание и применение шаблонов
Эта глава полностью посвящена созданию шаблонов и работе с ними как с основой таблиц стилей XSLT. Каждый шаблон образует правило, которое процессор XSLT пытается применить к исходному документу.
В главе 2 мы кратко рассмотрели таблицы стилей и основные шаблоны, при помощи которых наши примеры таблиц стилей в действительности могли что-то сделать. В этой главе мы собираемся подробно изучить шаблоны, а в следующей мы увидим, какие виды выражений можно применять для создания образцов выбора в шаблонах, позволяющих находить требуемые узлы. Образцы выбора (match pattern) являются подмножеством всего языка XPath и достаточно сложны для того, чтобы посвятить им отдельную главу.
В этой главе мы сначала рассмотрим, как работают основные шаблоны, и затем перейдем к таким темам, как правила шаблонов по умолчанию, выбор шаблона для работы, обработка атрибутов, создание мелких и глубоких копий элементов, завершение обработки шаблона и многое другое.
Создание шаблона
В главе 2 для выбора узлов в
planets.xml
и преобразования этого документа в HTML я создал основной шаблон. Шаблоны в таблицах стилей создаются при помощи элементов
<xsl:template>
, задающих правила для требуемых преобразований. Мы создали шаблон, находивший корневой элемент
<PLANETS>
по образцу "
/PLANETS
", которому соответствуют все элементы
<PLANETS>
, дочерние для корневого узла:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http.//www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
.
.
.
</xsl:template>
.
.
.
</xsl:stylesheet>
Когда
процессор XSLT находит узел, удовлетворяющий образцу вашего шаблона, этот узел становится контекстным узлом шаблона, то есть все операции производятся над этим узлом. На текущий узел можно ссылаться при помощи выражения XPath «.». Другие выражения XPath мы рассмотрим в этой главе и в главе 7.
УСОВЕРШЕНСТВОВАНИЯ В XSLT 2.0
В XSLT 1.0 возникали трудности при выборе элементов или атрибутов с нулевыми значениями, что должно быть исправлено в XSLT 2.0.
Внутри шаблона создайте разметку HTML, начинающую требуемую таблицу, — такая прямая вставка разметки называется элементом буквального (literal) результата. Когда процессор встречает литерал, он копирует его в результирующее дерево:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER=2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
</TABLE>
</BODY>
</HTML>
</xsl:template>
.
.
.
</xsl:stylesheet>
Однако это правило обрабатывает только элемент
<PLANETS>
, но не его дочерние элементы
<PLANET>
, содержащие сами данные. В соответствии с правилами шаблона по умолчанию, элементы
<PLANET>
будут обрабатываться, если установить шаблон для их выбора. Это, кстати, нежелательно, поскольку я хочу вставить результат обработки элементов
<PLANET>
в определенное место в создаваемом файле HTML. Для этого мне потребуется применить элемент