<?xml version='1..0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<HTML>
<HEAD>
<TITLE>
A trivial transformation
</TITLE>
</HEAD>
<BODY>
This transformation has replaced the entire document.
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
Результат: при помощи элемента <xsl:template>
я установил правило в таблице стилей. Когда процессор XSL считывает документ, первым узлом является корневой узел. Это правило находит данный корневой узел, и от того процессор XSL копирует литералы в результирующее дерево, что даст нам HTML doc и заменит его документом HTML, генерируя следующий результат:
<HTML>
<HEAD>
<TITLE>
A trivial transformation
</TITLE>
</HEAD>
<BODY>
This transformation has replaced the entire document.
</BODY>
</HTML>
Рассмотренный пример иллюстрирует первое, устаревшее преобразование. Была создана простая таблица стилей с единственным элементом <xsl:template>
, который содержит только элемент буквального результата. Все, что сделано в примере, — замена всего документа XML на документ HTML, что не очень впечатляет. Далее мы увидим, как работает рекурсивная обработка с использованием элемента <xsl:apply-templates>
.
Элемент <xsl:apply-templates>
В уже написанном нами основном шаблоне корневой узел искался по выражению '/' и заменялся на элемент буквального вывода. Однако, когда мы ищем корневой узел, обычно нам нужно обработать и всю оставшуюся часть документа, что мы сделаем при помощи элемента <xsl:apply- templates>
.
В следующем списке перечислены атрибуты этого элемента:
• select
(необязательный). Набор обрабатываемых узлов. Если атрибут опущен, автоматически обрабатываются все потомки узла. Устанавливается в выражение;
• mode
(необязательный). Устанавливает режим обработки. К этому узлу применяются правила шаблона с режимом выбора. Принимает значение типа QName
.
Элемент <xsl:apply-templates>
может содержать ноль или более элементов <xsl:sort>
, или ноль или более элементов <xsl:with-param>
.
В следующем примере шаблон ищет корневой узел и замещает его элементом буквального результата <HTML>:
<?xml version='1.0'>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://ww.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<HTML>
</HTML>
</xsl:template>
.
.
.
С другой стороны, мы только нашли корневой узел, а дерево данных planets.xml имеет ряд узлов под корневым узлом:
<?xml version='1.0'?>
<?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>
.
.
.
Для обработки не только одного корневого узла можно использовать <xsl:apply- templates>
, добавив этот элемент следующим образом:
<?xml version='1.0'>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<HTML>
<xsl:apply-templates/>
</HTML>
</xsl:template>
.
.
.
Этот элемент дает указание процессору XSLT просмотреть все дочерние узлы корневого узла и попытаться найти шаблон, которому эти узлы удовлетворяют. Например, вам может потребоваться заменить все элементы <PLANET>
на <P>Planet</P>
. Элементы <PLANET>
— дочерние узлы элемента <PLANETS>
, поэтому сначала