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

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

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

Использовать функцию

translate
с переменными
lowercase
и
uppercase
можно следующим образом:

translate('Дом', $uppercase, $lowercase)
'дом'

translate('Дом', $lowercase, $uppercase)
'ДОМ'

Именованные шаблоны можно вызывать элементом

xsl:call-template
, передавая параметр при помощи
xsl:with-param
. Например, следующий фрагмент
шаблона

...

<xsl:call-template name="lower">

 <xsl:with-param name="str" select="'Дом'"/>

</xsl:call-template
>

...

создаст в выходящем дереве текстовый узел со значением "

дом
".

Функции множеств узлов

Функции last и position

number last

number position

Функция

last
возвращает текущий размер контекста — число, которое показывает, сколько узлов находится в обрабатываемом в данный момент множестве.

Функция

position
возвращает позицию контекста — число, показывающее порядковый номер контекстного узла в обрабатываемом множестве.

Пример

В этом примере мы будем заменять все элементы элементами вида

<element name="..." position="...">

 ...

</element>

где атрибут

name
будет содержать имя, a
position
— через дробь позицию элемента в контексте и размер контекста.

Листинг 6.7. Входящий документ

<а>

 <b/>

 <c/>

 <d>

<e/>

<f/>

 </d>

</a>

Листинг 6.8. Преобразование

<xsl:stylesheet

 version="1.0"

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

 <xsl:output indent="yes"/>

 <xsl:strip-space elements="*"/>

 <xsl:template match="*">

<element name="{name}" pos="{position}/{last}">

<xsl:apply-templates/>

</element>

 </xsl:template>

</xsl:stylesheet>

Листинг 6.9.
Выходящий документ

<element name="a" pos="1/1">

 <element name="b" pos="1/3"/>

 <element name="c" pos="2/3"/>

 <element name="d" pos="3/3">

<element name="e" pos="1/2"/>

<element name="f" pos="2/2"/>

 </element>

</element>

Отметим, что если бы мы не удаляли лишние пробельные символы во входящем документе при помощи элемента

xsl:strip-space
, в контексте преобразования учитывались бы также и текстовые узлы, которые им соответствуют. Выходящий документ без этого элемента имел бы следующий вид:

<element name="a" pos="1/1">

 <element name="b" pos="2/7"/>

 <element name="c" pos="4/7"/>

 <element name="d" pos="6/7">

<element name="e" pos="2/5"/>

<element name="f" pos="4/5"/>

 </element>

</element>

Функция count

number count(node-set)

Функция

count
возвращает число узлов, которое входит во множество, переданное ей в качестве аргумента.

Пример

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

count(/*/*)
. Например, для входящего документа из примера к функциям
last
и
position
(листинг 6.7) это выражение примет значение
3
.

Приведем несколько других примеров, используя тот же документ.

Покажем, что дерево документа на листинге 6.7 имеет ровно один корневой узел:

count(/)
1

и ровно один элемент, находящийся в корне:

count(/*)
1

Подсчитаем количество текстовых узлов, принадлежащих элементу

a
(это те самые пробельные текстовые узлы, которые были удалены элементом
xsl:strip-space
):

count(/a/text)
4

Подсчитаем общее количество элементов в документе:

count(//*)
6

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

Комендант некромантской общаги 2

Леденцовская Анна
2. Мир
Фантастика:
юмористическая фантастика
7.77
рейтинг книги
Комендант некромантской общаги 2

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

Токсик Саша
7. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.75
рейтинг книги
Темный Лекарь 7

Семья для мажора

Зайцева Кристина
3. Мажоры
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья для мажора

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

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

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

Госпожа Доктор

Каплунова Александра
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Госпожа Доктор

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

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

Дорогой Солнца

Котов Сергей
1. Дорогой Солнца
Фантастика:
боевая фантастика
постапокалипсис
5.00
рейтинг книги
Дорогой Солнца

Довлатов. Сонный лекарь 3

Голд Джон
3. Не вывожу
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь 3

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Русь. Строительство империи 2

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

Душелов. Том 4

Faded Emory
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Душелов. Том 4

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

S-T-I-K-S. Пройти через туман

Елисеев Алексей Станиславович
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
7.00
рейтинг книги
S-T-I-K-S. Пройти через туман