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

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

Жанры

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

Шрифт:

Чтобы выбрать узел или узлы из набора узлов или обработать их, вы можете воспользоваться следующими функциями XPath для работы с наборами узлов, которые впервые встретились нам в главе 4 (и которые мы более подробно рассмотрим в следующей главе):

• 

count(node-set)
. Эта функция возвращает количество узлов в наборе. Если опустить параметр «набор узлов», функция будет применена к контекстному узлу;

• 

id(string ID)
. Эта функция возвращает набор узлов из элемента, чей ID удовлетворяет строке, переданной функции в качестве параметра, или пустой набор узлов, если ни у какого элемента
нет указанного ID. Можно указать несколько идентификаторов, разделенных символами-разделителями, — в таком случае функция вернет набор узлов из элементов с этими идентификаторами;

• 

last
. Возвращает номер последнего узла в наборе;

• 

local-name(node-set)
. Возвращает локальное имя первого узла в наборе. Если опустить параметр «набор узлов», функция будет применена к контекстному узлу;

• 

name(node-set)
. Возвращает полностью определенное имя первого узла в наборе. Если опустить параметр «набор узлов», функция будет применена к контекстному узлу;

• 

namespace-uri(node-set)
. Возвращает URI пространства имен первого узла в наборе. Если опустить параметр «набор узлов», функция будет применена к контекстному узлу;

• 

position
. Возвращает позицию контекстного узла в контекстном наборе узлов (начиная с 1).

В следующем примере (из главы 6) для подсчета количества узлов в наборе применяется функция

count
. В этом случае набор узлов состоит из всех элементов
<PLANET>
в
planets.xml
, и я получил его при помощи пути расположения «
\\PLANET
» (который как путь расположения также является выражением XPath):

<xsl:stylesheet

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

 <xsl:output method="xml" indent="yes"/>

 <xsl:template match="*">

<xsl:copy>

<xsl:apply-templates/>

</xsl:copy>

 </xsl:template>

 <xsl:template match="PLANET">

<xsl:copy use-attribute-sets="numbering">

<xsl:apply-templates/>

</xsl:copy>

 </xsl:template>

 <xsl:attribute-set name="numbering">

<xsl:attribute name="number"><xsl:number/></xsl:attribute>

<xsl:attribute name="total">

<xsl:value-of select="count(//PLANET)"/>

</xsl:attribute>

 </xsl:attribute-set>

</xsl:stylesheet>

Ниже показан результат; заметьте, что у каждого элемента

<PLANET>
есть оба атрибута,
number
и
total
, и атрибут
total
содержит общее число элементов
<PLANET>
в документе:

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

<PLANETS>

 <PLANET number="1" total="3">

<NAME>Mercury</NAME>

<MASS>.0553</MASS>

<DAY>58.65</DAY>

<RADIUS>1516</RADIUS>

<DENSITY>.983</DENSITY>

<DISTANCE>43.4</DISTANCE>

 </PLANET>

 <PLANET number="2" total="3">

<NAME>Venus</NAME>

<MASS>.815</MASS>

<DAY>116.75</DAY>

<RADIUS>3716</RADIUS>

<DENSITY>.943</DENSITY>

<DISTANCE>66.8</DISTANCE>

 </PLANET>

 <PLANET number="3" total="3">

<NAME>Earth</NAME>

<MASS>1</MASS>

<DAY>1</DAY>

<RADIUS>2107</RADIUS>

<DENSITY>1</DENSITY>

<DISTANCE>128.4</DISTANCE>

 </PLANET>

</PLANETS>

Среди функций для работы с наборами узлов в особенности обратите внимание на функции

name
и
local-name
. С их помощью можно определить имя текущего элемента: например, если текущим элементом является
<DAY>
,
local-name
вернет
DAY
. Следующая таблица стилей демонстрирует, для чего это может понадобиться; в ней я использую такие теги, как
<PLANETS>
,
<PLANET>
и
<DATA>
, в качестве элементов буквального результата:

<?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="PLANETS">

<PLANETS>

<xsl:for-each select="PLANET">

<PLANET>

<xsl:for-each select="*">

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

Повелитель механического легиона. Том VI

Лисицин Евгений
6. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VI

Развод с генералом драконов

Солт Елена
Фантастика:
фэнтези
5.00
рейтинг книги
Развод с генералом драконов

Дочь опальной герцогини

Лин Айлин
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дочь опальной герцогини

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Новые горизонты

Лисина Александра
5. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Новые горизонты

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Новый Рал

Северный Лис
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Новый Рал

Темный Лекарь 4

Токсик Саша
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 4

Двойник Короля 5

Скабер Артемий
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Двойник Короля 5

Мир-о-творец

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