Шрифт:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="#"?>
<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>
на Planet
. Элементы <PLANET>
— дочерние узлы элемента <PLANETS>
, поэтому сначала я добавил новый шаблон для <PLANETS>
, что говорит процессору о том, что следует продолжать поиск дочерних узлов: <?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>
<xsl:template match="PLANETS">
<xsl:apply-templates/>
</xsl:template>
.
.
.
Теперь можно добавить еще один шаблон для следующего уровня, включающего элементы
<PLANET>
. В этом случае я просто заменю каждый элемент <PLANET>
элементом буквального результата Planet
(листинг 2.3). Листинг 2.3. Использование <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>
<xsl:template match="PLANETS">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="PLANET">
Planet
</xsl:template>
</xsl:stylesheet>
Вот результат применения этой таблицы стилей:
<HTML>
<Р>
Planet
</Р>
<Р>
Planet
</Р>
Planet
</Р>
</HTML>
Как видите, от элемента
<PLANETS>
ничего не осталось. Все, что осталось, — три элемента буквального результата Planet
, которые заменили три элемента <PLANET>
. ПРОПУСК АТРИБУТА SELECT
Если опустить атрибут select, будут обрабатываться только дочерние узлы текущего узла, не включающие атрибуты или узлы пространств имен, так как они не считаются дочерними. Если вы хотите обрабатывать узлы этих видов, необходимо использовать атрибут select, как будет рассмотрено в главе 3.