Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

 <xsl:template match="PLANET">

Planet

 </xsl:template>

</xsl:stylesheet>

Вот результат применения этой таблицы стилей:

<HTML>

 <Р>

Planet

 </Р>

 <Р>

Planet

 </Р>

 

Planet

 </Р>

</HTML>

Как

видите, от элемента
<PLANETS>
ничего не осталось. Все, что осталось, — три элемента буквального результата
Planet
, которые заменили три элемента
<PLANET>
.

ПРОПУСК АТРИБУТА SELECT

Если опустить атрибут select, будут обрабатываться только дочерние узлы текущего узла, не включающие атрибуты или узлы пространств имен, так как они не считаются дочерними. Если вы хотите обрабатывать узлы этих видов, необходимо использовать атрибут select, как будет рассмотрено в главе 3.

Все это занимательно, но малопригодно практически. Было бы гораздо лучше, если бы мы, например, могли обратиться к фактическому значению каждого элемента (такому как имя каждой планеты) и работать с этими данными. И это, конечно, возможно.

Доступ к значениям узлов

Получить доступ к значению узла можно при помощи элемента

<xsl:value-of>
, у которого есть два возможных атрибута:

• 

select
(обязательный). Выходное значение. Устанавливается в выражение;

• disable-output-escaping (необязательный). Указывает, что символы, такие как

>
, будут отправляться в выходной поток как есть, не изменяясь на
&gt;
. Значения этого атрибута:
yes
или
no
.

Элемент

<xsl:value-of>
всегда пуст.

При помощи атрибута

select
можно указать, значение какого узла требуется получить. Например, вам может потребоваться значение узла
<NAME>
в каждом элементе
<PLANET>
, то есть текст, заключенный в этом узле. Это можно сделать следующим образом (листинг 2.4).

Листинг 2.4. Использование <xsl:value-of>

<?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">

<xsl:value-of select="NAME"/>

 </xsl:template>

</xsl:stylesheet>

Значение

узла, содержащего текст, будет просто текстом, поэтому результат применения этой таблицы стилей к
planets.xml
следующий:

<HTML>

 Mercury

 Venus

 Earth

</НТМL>

АТРИБУТ DISABLE-OUTPUT-ESCAPING

Атрибут disable-output-escaping элемента <xsl:value-of> более подробно рассмотрен в главе 3.

Предположим, нам нужно осуществить нечто более сложное — например, преобразовать данные из

planets.xml
в HTML-таблицу в новом файле
planets.html
(рис. 2.1), как мы видели в главе 1. Теперь это можно сделать при помощи
<xsl:value-of>
.

Рис. 2.1. Planets.html в Internet Explorer

Здесь важно учесть один момент. В

planets.xml
формально не задан порядок элементов
<MASS>
,
<RADIUS>
,
<DAY>
и
<DISTANCE>
, однако важно, чтобы эти элементы обрабатывались в определенном порядке в соответствии с заголовками таблицы. Поэтому я буду использовать элементы
<xsl:value-of>
в том порядке, в котором они требуются в таблице HTML.

Таким образом, чтобы создать HTML-таблицу, изображенную на рис. 2.1, я сначала ищу элемент

<PLANETS>
и затем заменяю его на HTML для создания самой HTML-таблицы. Элемент
<PLANETS>
— дочерний элемент корневого узла, и поскольку на корневой узел можно сослаться через «/», на элемент
<PLANETS>
можно сослаться непосредственно через "
/PLANETS
", без необходимости предварительно применять шаблон для корневого узла. Это пример выражения XPath, большое число подобных мы также увидим в главе 4.

Ниже приведен пример того, как я начал создавать HTML-таблицу путем выбора элемента

<PLANETS>
непосредственно как "
/PLANETS
" — заметьте, что для применения шаблонов к любым дочерним узлам
<PLANETS>
я использовал
<xsl:apply-templates>
:

<?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>

Поделиться с друзьями: