я добавил новый шаблон для <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>
элементом буквального результата <P>Planet</P>
(листинг 2.3).
<?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'>
<P>
Planet
</P>
</xsl:template>
</xsl:stylesheet>
Вот результат применения этой таблицы стилей:
<HTML>
<Р>
Planet
</Р>
<Р>
Planet
</Р>
<P>
Planet
</Р>
</HTML>
Как видите, от элемента <PLANETS>
ничего не осталось. Все, что осталось, — три элемента буквального результата <P>Planet</P>
, которые заменили три элемента <PLANET>
.
ПРОПУСК АТРИБУТА SELECT
Если опустить атрибут select, будут обрабатываться только дочерние узлы текущего узла, не включающие атрибуты или узлы пространств имен, так как они не считаются дочерними. Если вы хотите обрабатывать узлы этих видов, необходимо использовать атрибут select, как будет рассмотрено в главе 3.
Все это занимательно, но малопригодно практически. Было бы гораздо лучше, если бы мы, например, могли обратиться к фактическому значению каждого элемента (такому как имя каждой планеты) и работать с этими данными. И это, конечно, возможно.
Доступ к значениям узлов
Получить доступ к значению узла можно при помощи элемента <xsl:value-of>
, у которого есть два возможных атрибута:
• select
(обязательный). Выходное значение. Устанавливается в выражение;
• disable-output-escaping (необязательный). Указывает, что символы, такие как >
, будут отправляться в выходной поток как есть, не изменяясь на >
. Значения этого атрибута: yes
или no
.
Элемент <xsl:value-of>
всегда пуст.
При помощи атрибута select
можно указать, значение какого узла требуется получить. Например, вам может потребоваться значение узла <NAME>
в каждом элементе <PLANET>
, то есть текст, заключенный в этом узле. Это можно сделать следующим образом (листинг 2.4).
<?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'>