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

на главную - закладки

Жанры

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

Шрифт:

.

.

 </xsl:template>

</xsl:stylesheet>

В новом шаблоне, обрабатывающем элементы

<PLANET>
, я должен извлечь данные из каждого элемента
<PLANET>
, то есть восстановить значения в дочерних элементах элемента
<PLANET>
, таких как
<MASS>
,
<DAY>
и т.д.:

<?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:value-of>
.

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

Элемент

<xsl:value-of>
записывает в результирующий документ строковое значение выражения; в частности, с его помощью можно возвратить значение узла, которым для элемента будет заключенный в элемент текст. Атрибуту выбора элемента
<xsl:value-of>
можно присвоить выражение XPath, задающее узел или набор узлов. В шаблоне, задающем элементы
<PLANET>
, обратиться к дочернему элементу
<MASS>
можно при помощи выражения XPath "
child::MASS
". Как мы увидим в главе 4, выражения XPath можно писать разными способами: например, вместо "
child::MASS
" можно просто написать "
MASS
". Таким образом, получить данные дочерних элементов, таких как
<MASS>
,
<DAY>
и т.д., можно следующим способом (листинг 3.1).

Листинг 3.1. Полная версия planets.xsl

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

<Н1>

The Planets Table

</Н1>

<TABLE BORDER="2">

<TR>

<TD>Name</TD>

<TD>Mass</TD>

<TD>Radius</TD>

<TD>Day</TD>

</TR>

<xsl:apply-templates/>

</TABLE>

</BODY>

</HTML>

 </xsl:template>

 <xsl:template match="PLANET">

<TR>

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

<TD><xsl:value-of select="MASS"/></TD>

<TD><xsl:value-of select="RADIUS"/></TD>

<TD><xsl:value-of select="DAY"/></TD>

</TR>

 </xsl:template>

</xsl:stylesheet>

Создание образцов выбора

Как вы могли ожидать, исходя из того, что "

child::MASS
" можно представить в виде "
MASS
" и применения шаблонов, таких как "
/
", "
/PLANETS
" и т.д., вплотную познакомиться с созданием образцов выбора не так-то просто — этому посвящена вся глава 4.

Образцы выбора (match pattern) являются подмножеством полного языка XPath, их можно использовать в элементах

<xsl:template
>,
<xsl:key>
и
<xsl:number>
. В частности, в образец можно установить атрибут match у
<xsl:template>
и
<xsl:key>
, и атрибуты
count
и
from
элемента
<xsl:number>
. В следующем списке приведен ряд примеров образцов выбора, много других примеров будет показано в главе 4 при подробном обсуждении использования XPath для выбора узлов и атрибутов:

• "

/
" выбирает корневой узел;

• "

*
" выбирает элементы узлов (но не всех узлов, как зачастую ошибочно полагают);

• "

PLANET
" выбирает элементы
<PLANET>
;

• "

PLANET/MASS
" выбирает все элементы
<MASS>
, дочерние для элемента
<PLANET>
;

• "

//PLANET
" выбирает все элементы
<PLANET>
, производные от корневого узла;

• "

.
" выбирает текущий узел (технически это не образец выбора, а выражение XPath, как мы увидим в главе 7).

Образцы можно также использовать в атрибуте

select
элементов
<xsl:apply-templates>
,
<xsl:value-of>
,
<xsl:for-each>
,
<xsl:copy-of>
и
<xsl:sort>
; фактически атрибут
select
этих элементов может содержать полные выражения XPath, а не только образцы выбора. Атрибут
select
элемента
<xsl:value-of>
определяет дочерний узел, значение которого нужно получить:

Поделиться:
Популярные книги

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII

Отмороженный

Гарцевич Евгений Александрович
1. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Газлайтер. Том 20

Володин Григорий Григорьевич
20. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.25
рейтинг книги
Газлайтер. Том 20

Буря соперничества

Мазуров Дмитрий
4. Громовая поступь
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Буря соперничества

Отморозок 3

Поповский Андрей Владимирович
3. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 3

Анти-Ксенонская Инициатива

Вайс Александр
7. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Анти-Ксенонская Инициатива

Сильнейший Столп Империи. Книга 3

Ермоленков Алексей
3. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 3

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 16

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Барон

Первухин Андрей Евгеньевич
5. Ученик
Фантастика:
фэнтези
5.60
рейтинг книги
Барон

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Кодекс Охотника. Книга VI

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.50
рейтинг книги
Вечный. Книга I

Сирота

Ланцов Михаил Алексеевич
1. Помещик
Фантастика:
альтернативная история
5.71
рейтинг книги
Сирота