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

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

Жанры

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

Шрифт:

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

select
таких элементов, как
<xsl:apply-templates>
,
<xsl:value-of>
,
<xsl:for-each>
и
<xsl:copy-of>
. Здесь важно отметить один момент: атрибут
select
этих элементов обладает большими возможностями, чем атрибуты
match
,
count
и
from
элементов
<xsl:template>
,
<xsl:key>
и
<xsl:number>
, потому
что в
select
можно использовать полные выражения XPath, а не только образцы выбора.

Образцы выбора являются подмножеством выражений XPath, то есть все образцы выбора являются допустимыми выражениями XPath, но не все выражения XPath являются образцами выбора. Единственные выражения XPath, которые могут быть образцами, — это выражения, возвращающие набор узлов (даже набор, состоящий из одного узла) и использующие пути, которые задают только дочерние узлы или узлы атрибутов.

Образцы выбора определены в самой рекомендации XSLT, в то время как выражения XPath определены в рекомендации XPath (www.w3.org/TR/xpath); тем не менее, эти рекомендации совместимы, потому что все образцы выбора являются одновременно выражениями XPath.

СОЗДАНИЕ ПОЛНЫХ ВЫРАЖЕНИЙ XPATH

В главе 7 «Работа и изучение XPath» показано, как создавать полные выражения XPath. Полные выражения XPath можно применять в XSLT в следующих местах: в атрибуте select элементов <xsl:apply-templates>, <xsl:value-of>, <xsl:for-each>, <xsl:param>, <xsl:variable>, <xsl:with-param>, <xsl:copy-of> и <xsl:sort>; в значениях шаблонов атрибутов; в атрибуте test элементов <xsl:if> и <xsl:when>; в значении атрибута элемента <xsl:number> и в предикатах образцов выбора.

Чтобы еще больше все усложнить, следует сказать, что выражения XPath можно использовать в специальной, необязательной части (и только в этой части) образцов выбора: в предикатах. Как мы увидим в этой главе, предикаты — это выражения XPath, которые вычисляются либо в значения «истина/ложь», либо в числа, заключаемые в квадратные скобки, [ и ]. Например, образец

PLANET[NAME="Venus"]
выбирает дочерние узлы
<PLANET>
контекстного узла, у которых есть дочерние узлы
<NAME>
с текстом «Venus». Выражения внутри [ и ] представляют собой настоящие выражения XPath с известными ограничениями, которые будут рассмотрены в этой главе.

Безусловно, для создания образцов выбора необходим опыт, поэтому в данной главе приводится много примеров.

MICROSOFT И НЕСТАНДАРТНЫЕ ОБРАЗЦЫ ВЫБОРА

Microsoft поддерживает образцы выбора в своем процессоре XML MSXML3, но есть еще кое-что, о чем вам следует знать: с образцами выбора Microsoft использует также весьма много нестандартного, не используемого W3C синтаксиса. В этой главе я собираюсь придерживаться официальной, W3C, версии, и если вам доведется читать документацию Microsoft об образцах выбора, имейте в виду, что многое из этой документации относится только к реализации Microsoft.

Выбор корневого узла

Как вы уже видели, выбрать корневой узел можно при помощи образца выбора «/», как, например:

<xsl:template match="/">

 <HTML>

<xsl:apply-templates/>

 </HTML>

</xsl:template>

Выбор элементов

Можно выбирать элементы, просто задавая их имена, как мы уже

видели. Следующий шаблон выбирает элементы
<PLANETS>
:

<xsl:template match="PLANETS">

 <HTML>

<xsl:apply-templates/>

 </HTML>

</xsl:template>

Выбор дочерних элементов

При доступе к дочернему узлу определенного узла для разделения имен элементов можно использовать операцию шага /. Пусть, например, требуется создать правило, которое должно применяться только к тем элементам

<NAME>
, которые являются дочерними для элементов
<PLANET>
. Для этого можно задать выражение "
PLANET/NAME
". Вот правило, окружающее текст таких элементов в элемент HTML
<Н3>
:

<xsl:template match="PLANET/NAME">

 <H3>

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

 </H3>

</xsl:template>

Можно также использовать символ * в качестве символа-подстановки, что соответствует любому элементу. (* может выбирать только элементы, однако образец @* выбирает любой атрибут.) Например, следующее правило применяется ко всем элементам

<NAME>
, которые являются внуками элементов
<PLANET>
:

<xsl:template match="PLANET/*/NAME">

 <H3>

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

 </H3>

</xsl:template>

Выбор потомков элемента

В предыдущем разделе при помощи выражения "

PLANET/NAME
" я выбирал все элементы
<NAME>
, являющиеся прямыми потомками элементов
<PLANET>
, а при помощи выражения "
PLANET/*/NAME
" — все элементы
<NAME>
, являющиеся внуками элементов
<PLANET>
. Есть, однако, более простой способ выполнить оба выбора — применить выражение "
PLANET//NAME
", выбирающее все элементы
<NAME>
, находящиеся внутри элементов
<PLANET>
, независимо от глубины вложенности (соответствующие элементы называются потомками элемента
<PLANET>
). Иными словами, "
PLANET//NAME
" выбирает "
PLANET/NAME
", "
PLANET/*/NAME
", "
PLANET/*/*/NAME
" и т.д.:

<xsl:template match="PLANETS//NAME">

 <H3>

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

 </H3>

</xsl:template>

Выбор атрибутов

Как было показано в главе 3, «Создание и применение шаблонов», можно выбирать атрибуты, если предварять их имена префиксом @. Вы уже работали с атрибутом

UNITS
, который поддерживают большинство детей элементов
<PLANET>
:

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

Весь цикл «Десантник на престоле». Шесть книг

Ланцов Михаил Алексеевич
Десантник на престоле
Фантастика:
альтернативная история
8.38
рейтинг книги
Весь цикл «Десантник на престоле». Шесть книг

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

Мужчина моей судьбы

Ардова Алиса
2. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.03
рейтинг книги
Мужчина моей судьбы

Прорвемся, опера! Книга 3

Киров Никита
3. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера! Книга 3

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Игра на чужом поле

Иванов Дмитрий
14. Девяностые
Фантастика:
попаданцы
альтернативная история
5.50
рейтинг книги
Игра на чужом поле

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Ворон. Осколки нас

Грин Эмилия
2. Ворон
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ворон. Осколки нас

Сумеречный стрелок

Карелин Сергей Витальевич
1. Сумеречный стрелок
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок

Измена. Испорченная свадьба

Данич Дина
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Измена. Испорченная свадьба

Прометей: Неандерталец

Рави Ивар
4. Прометей
Фантастика:
героическая фантастика
альтернативная история
7.88
рейтинг книги
Прометей: Неандерталец

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

Четвертый год

Каменистый Артем
3. Пограничная река
Фантастика:
фэнтези
9.22
рейтинг книги
Четвертый год