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

на главную

Жанры

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

Шрифт:
Листинг 7.5. Применение оси ancestor-or-self

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:output method="xml"/>

 <xsl:template match="MASS">

<xsl:for-each select="ancestor-or-self::*[@AUTHOR]">

<xsl:value-of select="local-name(.)"/>

<xsl:text> </xsl:text>

</xsl:for-each>

 </xsl:template>

 <xsl:template match="PLANET">

<xsl:apply-templates select="MASS"/>

 </xsl:template>

</xsl:stylesheet>

Вот

результат; показаны выбранные предки всех трех элементов
<MASS>
, включая сам элемент
<MASS>
, при условии, что у него имеется атрибут
AUTHOR
:

<?xml version="1.0" encoding="UTF-8"?>

PLANETS PLANET MASS

PLANETS PLANET

PLANETS

Применение оси descendant

Ось

descendant
(потомок) содержит всех потомков контекстного узла. Заметьте, что сюда не входят атрибуты или узлы пространств имен, поскольку они не считаются дочерними узлами.

В следующем примере (листинг 7.6) демонстрируется работа с этой осью. На этот раз я хочу добавить примечание к элементу

<PLANET>
Меркурия:
<INFO>Sorry, Mercury has blown up and is no longer available.</INFO>
(Извините, но Меркурий взорвался и больше не доступен.). Чтобы найти Меркурий, мне достаточно только проверить, имеет ли какой-либо потомок элемента
<PLANET>
строковое значение «
Mercury
», что я сделаю при помощи выражения XPath внутри предиката выбора.

Листинг 7.6. Применение оси descendant

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:output method="xml"/>

 <xsl:template match="PLANET[descendant::*='Mercury']">

<xsl:copy>

<xsl:apply-templates select="@*|node"/>

<INFO>Sorry. Mercury has blown up and is no longer available.</INFO>

</xsl:copy>

 </xsl:template>

 <xsl:template match="@*|node">

<xsl:copy>

<xsl:apply-templates select="@*|node"/>

</xsl:copy>

 </xsl:template>

</xsl:stylesheet>

Вот результирующий

документ, дополненный новым элементом
<INFO>
только для Меркурия:

<?xml version="1.0" encoding="utf-8"?>

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

  <INFO>Sorry, Mercury has blown up and is no longer available.</INFO>

 </PLANET>

 <PLANET>

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

 .

 .

 .

</PLANETS>

Применение оси descendant-or-self

Ось

descendant-or-self
содержит всех потомков контекстного узла и сам контекстный узел. Заметьте, однако, что она не содержит атрибутов и узлов пространств имен.

В следующем примере (листинг 7.7) демонстрируется работа с осью. В этом случае я создал упрощенную таблицу стилей (подробнее об упрощенных таблицах стилей см. главу 2), которая обрабатывает все элементы с использованием потомков, генерируя уже знакомую нам HTML-таблицу данных о планетах.

Листинг 7.7. Применение оси descendant-or-self

<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0">

 <HEAD>

<TITLE>

The Planets Table

</TITLE>

 </HEAD>

 <BODY>

<H1>

The Planets Table

</Н1>

<TABLE BORDER="2">

<TR>

<TD>Name</TD>

<TD>Mass</TD>

<TD>Radius</TD>

<TD>Day</TD>

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

Проект ’Погружение’. Том 1

Бредвик Алекс
1. Проект ’Погружение’
Фантастика:
фэнтези
рпг
постапокалипсис
5.00
рейтинг книги
Проект ’Погружение’. Том 1

Игра топа. Между двух огней

Вяч Павел
2. Игра топа
Фантастика:
фэнтези
7.57
рейтинг книги
Игра топа. Между двух огней

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Черный Маг Императора 9

Герда Александр
9. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 9

Комбинация

Ланцов Михаил Алексеевич
2. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Комбинация

Санек 2

Седой Василий
2. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 2

Целитель

Первухин Андрей Евгеньевич
1. Целитель
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Целитель

Сердце Дракона. Том 8

Клеванский Кирилл Сергеевич
8. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.53
рейтинг книги
Сердце Дракона. Том 8

Отвергнутая невеста генерала драконов

Лунёва Мария
5. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Отвергнутая невеста генерала драконов

Внешники такие разные

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники такие разные

Скрываясь в тени

Мазуров Дмитрий
2. Теневой путь
Фантастика:
боевая фантастика
7.84
рейтинг книги
Скрываясь в тени

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

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

Сила рода. Том 1 и Том 2

Вяч Павел
1. Претендент
Фантастика:
фэнтези
рпг
попаданцы
5.85
рейтинг книги
Сила рода. Том 1 и Том 2

Курсант: назад в СССР 2

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