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

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

Жанры

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

Шрифт:

На этом мы заканчиваем обсуждение возможных условий узлов в образцах шага. Третья и последняя часть образцов шага — предикаты

Образцы шага, часть 3: предикаты

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

Например, можно проверить:

• значение атрибута в заданной строке;

• значение элемента;

• содержит ли элемент определенного ребенка, атрибут или другой элемент;

• позицию узла в дереве узлов.

Подробнее выражения XPath обсуждаются в главе 7, но здесь будет представлено введение в тему, так как эти

выражения можно применять в предикатах образцов.

Выражения XPath более сложны, чем образцы выбора. Если при их создании у вас возникнут затруднения, вам может помочь удобная программа-пример ApplyXPath.java из пакета Xalan, при помощи которой можно применить к документу выражение XPath и посмотреть на результаты. Например, если применить выражение XPath "

PLANET/NAME
" к
planets.xml
, будут отображены значения всех элементов
<NAME>
, дочерних по отношению к элементам
<PLANET>
(открывающий и закрывающий теги
<output>
добавляются программой ApplyXPath):

C:\>java ApplyXPath planets.xml PLANET/NAME

<output>

<NAME>Mercury</NAME>

<NAME>Venus</NAME>

<NAME>Earth</NAME>

</output>

Если предикат имеет числовое значение, последнее представляет условие позиции (position test). Например, NAME[1] выбирает первого ребенка

<NAME>
контекстного узла. Условия позиции W3C, а также условия позиции в Xalan, Oracle, XT, Saxon и MSXML3 (XML процессор от Microsoft, подразумевающий использование JavaScript, с которым вы встречались в главе 1 и еще встретитесь в главе 10, «Работа с API процессоров XSLT») основаны на 1, поэтому первый ребенок — это ребенок 1. Условия позиции в XML-документах, которые используют таблицы стилей XSL и загружаются в текущую версию Internet Explorer (версию 5.5, на смену которой приходит 6.0), основаны на 0 (и в предикатах можно использовать только очень сокращенную форму выражений XPath) — и, следовательно, так же считается в большей части документации по XSL на web-узле Microsoft. В другом случае значением предиката должна быть ложь или истина, что называется логическим условием (Boolean test). Например, предикат
[@UNITS="million miles"]
выбирает элементы, у которых имеются атрибуты
UNITS
со значением "
million miles
".

Предикаты являются полными выражениями XPath, хотя на предикаты, используемые в образцах, накладывается два ограничения:

• когда образец используется в атрибуте

match
, предикат не должен содержать никаких ссылок на переменные XSL (которые обсуждаются в главе 9). Это ограничение не применяется к предикатам, используемым в элементах
<xsl:number>
;

• образцы не могут использовать в предикатах функцию XPath

current
, возвращающую текущий узел. Ее применение ограничено, поэтому обработка зависит от реализации и не зависит от текущего состояния обработки.

В следующем примере образец выбирает элементы

<PLANET>
с дочерними элементами
<NAME>
:

<xsl:template match="PLANET[NAME]">

 .

 .

 .

</xsl:template>

Этот

образец выбирает любой элемент с дочерним элементом
<NAME>
:

<xsl:template match="*[NAME]">

 .

 .

 .

</xsl:template>

Теперь я задал элементам

<PLANET>
в
planets.xml
новый атрибут,
COLOR
, устанавливающий цвет планеты:

<?xml version="1.0"?>

<?xml-stylesheet type="text/xml" href="#"?>

<PLANETS>

 <PLANET COLOR="RED">

<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><!--В перигелии-->

 </PLANET>

 <PLANET COLOR="WHITE">

<NAME>Venus</NAME>

<MASS UNITS="(Earth = 1)">.815</MASS>

<DAY UNITS="days">116.75</DAY>

<RADIUS UNITS="miles">3716</RADIUS>

<DENSITY UNITS="(Earth = 1)">.943</DENSITY>

<DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->

 </PLANET>

 <PLANET COLOR="BLUE">

<NAME>Earth</NAME>

<MASS UNITS="(Earth = 1)></MASS>

<DAY UNITS="days">1</DAY>

<RADIUS UNITS="miles">2107</RADIUS>

<DENSITY UNITS="(Earth = 1)">1</DENSITY>

<DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->

 </PLANET>

</PLANETS>

Следующее выражение выбирает элементы

<PLANET>
с атрибутом
COLOR
:

<xsl:template match="PLANET[@COLOR]">

 .

 .

 .

</xsl:template>

А что, если нам требуется выбрать планеты, у которых атрибут

COLOR
имеет значение "
BLUE
" (голубой)? Это можно сделать при помощи операции =, как показано в листинге 4.5.

Листинг 4.5. Применение операции =

<"xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

Уникум

Поселягин Владимир Геннадьевич
1. Уникум
Фантастика:
альтернативная история
4.60
рейтинг книги
Уникум

Травница Его Драконейшества

Рель Кейлет
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Травница Его Драконейшества

Убивая маску

Метельский Николай Александрович
13. Унесенный ветром
Фантастика:
боевая фантастика
5.75
рейтинг книги
Убивая маску

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

Наша навсегда

Зайцева Мария
2. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Наша навсегда

Родословная. Том 5

Ткачев Андрей Юрьевич
5. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 5

Сфирот

Прокофьев Роман Юрьевич
8. Стеллар
Фантастика:
боевая фантастика
рпг
6.92
рейтинг книги
Сфирот

Наномашины, звереныш! Том 5

Новиков Николай Васильевич
5. Первый среди карапузов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наномашины, звереныш! Том 5

Тринадцатый XI

NikL
11. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Тринадцатый XI

Главбухша

Романов Владислав Иванович
Любовные романы:
остросюжетные любовные романы
5.00
рейтинг книги
Главбухша

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

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

Древесный маг Орловского княжества 9

Павлов Игорь Васильевич
9. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 9

Наследник для дона мафии

Тоцка Тала
2. Наследники мафии
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
Наследник для дона мафии

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

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