XSLT
Шрифт:
.
.
</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>
определяет дочерний узел, значение которого нужно получить:
Поделиться:
Популярные книги
Геном хищника. Книга седьмая
7. Я - Легенда!
Фантастика:
боевая фантастика
рпг
фэнтези
попаданцы
5.00
рейтинг книги
Мальвиль
Фантастика:
социально-философская фантастика
научная фантастика
альтернативная история
8.29
рейтинг книги
Я все еще барон
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Поводырь
3. Ботаник
Фантастика:
фэнтези
6.17
рейтинг книги
Технарь
1. Технарь
Фантастика:
космическая фантастика
попаданцы
7.13
рейтинг книги
Бастард Бога (Дилогия)
Фантастика:
альтернативная история
5.11
рейтинг книги
Эфемер
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Тринадцатый IX
9. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Звездная Кровь. Экзарх II
2. Экзарх
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Лекарь Империи 7
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Печать Пожирателя
4. Пожиратель
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 8
8. Путь Паладина
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Том 3. Рассказы 1896-1899
3. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
5.00