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

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

Жанры

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

Шрифт:

Чтобы выбрать узел или узлы из набора узлов или обработать их, вы можете воспользоваться следующими функциями 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="*">

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

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Я все еще князь. Книга XXI

Дрейк Сириус
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще князь. Книга XXI

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

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

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль

В теле пацана 6

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

Кодекс Императора III

Сапфир Олег
3. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора III

Изгой Проклятого Клана. Том 2

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

Князь Андер Арес 5

Грехов Тимофей
5. Андер Арес
Фантастика:
историческое фэнтези
фэнтези
героическая фантастика
5.00
рейтинг книги
Князь Андер Арес 5

Гнев Пламенных

Дмитриева Ольга Олеговна
5. Пламенная
Фантастика:
фэнтези
4.80
рейтинг книги
Гнев Пламенных

Гримуар темного лорда VIII

Грехов Тимофей
8. Гримуар темного лорда
Фантастика:
боевая фантастика
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Гримуар темного лорда VIII

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

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

Папина дочка

Рам Янка
4. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Папина дочка

Воронцов. Перезагрузка. Книга 3

Тарасов Ник
3. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 3

Цивилизация статуса (сборник)

Шекли Роберт
Сборники Роберта Шекли
Фантастика:
фэнтези
8.22
рейтинг книги
Цивилизация статуса (сборник)