- •XSLT
- •XPath
- •Шаг доступа состоит из трех частей: необязательной оси, проверки узла и необязательного предиката.
- •Оси выборки XPath
- •Оси — это база языка XPath.
- •Дочерняя ось и ось потомков
- •Оси братьев
- •Родительская ось и ось
- •Предикат
- •Операторы и специальные символы
- •Функции множеств узлов
- •Функция: number sum(node-set) возвращает сумму результатов преобразований строковых значений всех узлов в аргументном
- •Функция: string string(object?) преобразует объект в строку
- •Проверки типов узлов
- •string-length
- •Выбираются все атрибуты @id //@id
- •В общем случае в преобразовании участвуют три документа:
- •Процесс обработки делится на три стадии.
- •XSLT имеет некоторые ограничения:
- •xsl:stylesheet
- •xsl:template
- •Атрибуты элемента xsl:template
- •Корневое правило
- •xsl:value-of
- •Когда для каждого узла из некоторого набора требуется выполнить однотипную обработку, то применяется
- •В предыдущих примерах таблице полностью с тегов в XML-файле. изменять. Добавим в тег
- •xsl:sort
- •Условия
- •Элемент XSL:IF - фильтр
- •Переменные в XSLT
- •xsl:apply-templates
- •xsl:number
- •Атрибут format позволяет определить форматную строку, используемую как шаблон при выводе номера. Например,
- •from- указывающий, с какой точки начинается отсчет.
- •xsl:choose
- •xsl:attribute
- •Параметры в XSLT
Предикат
Предикат представляет собой фильтр, который определяет критерий выбора для дальнейшего уточнения списка узлов- кандидатов
<html>
<body> <div>Первый слой
<span>блок текста в первом слое</span> </div>
<div>Второй слой</div> <div>Третий слой
<span class="text">первый блок в третьем слое</span> <span class="text">второй блок в третьем слое</span>
<span>третий блок в третьем слое</span> |
||
</div> |
XPath-путь /html/body/*/span[@class] (полный |
|
синтаксис имеет вид |
||
<img /> |
||
/child::html/child::body/child::*/child::span[attribut |
||
</body> |
||
e::class]) будет соответствовать в нём двум |
||
</html> |
элементам исходного документа |
|
— <span class="text">первый блок в третьем слое</span>
— <span class="text">второй блок в третьем слое</span>.
Операторы и специальные символы
Оператор «дочерний элемент»: выбирает непосредственные / дочерние элементы коллекции, указанной слева. Если этот
оператор пути стоит в начале шаблона, будут выбраны дочерние элементы корневого узла.
Рекурсивный спуск; поиск заданного элемента на любой глубине. // Если этот оператор пути стоит в начале шаблона, рекурсивный
спуск будет вестись из корневого узла.
.Указывает текущий контекст.
.. |
Родитель узла текущего контекста. |
*Символ подстановки; выбирает все элементы независимо от их имени.
@Атрибут; префикс имени атрибута.
@* |
Символ подстановки для атрибута; выбирает все атрибуты |
|
независимо от имени. |
||
|
||
( ) |
Группирует операции для явного задания порядка их выполнения. |
|
[ ] |
Применяет шаблон фильтра. |
|
[ ] |
Оператор Subscript; используется для индексирования коллекции. |
|
+ |
Выполняет сложение. |
-Выполняет вычитание.
div Выполняет деление с плавающей запятой по стандарту IEEE 754.
*Выполняет умножение.
mod
Возвращает остаток от усекающего деления.
Функции множеств узлов
Функция last() возвращает число, равное размеру контекста в контексте вычисления выражения.
Функция position() возвращает число, равное позиции контекста в контексте вычисления выражения.
Функция count() возвращает число узлов в аргументном множестве узлов.
Функция number(object) преобразует ее аргумент в число
Функция: number sum(node-set) возвращает сумму результатов преобразований строковых значений всех узлов в аргументном множестве узлов в число.
Функция: number floor(number) возвращает наибольшее (ближайшее к положительной бесконечности) целое число, которое не больше, чем аргумент.
Функция: number ceiling(number) возвращает наименьшее (ближайшее к отрицательной бесконечности) целое число, которое не меньше, чем аргумент.
Функция: number round(number) возвращает ближайшее к аргументу целое число.
Функция: string string(object?) преобразует объект в строку
Функция: number string-length(string?) возвращает число символов в строке. Если аргумент отсутствует, он устанавливается по умолчанию значением контекстного узла, преобразованного в строку, другими словами, строковым значением контекстного узла.
Проверки типов узлов
(: Отобрать детей элемента X, у которых есть хотя бы один текстовый дочерний элемент. :)
X[text()]
(: Отобрать детей элемента X, у которых есть текстовый дочерний элемент, содержащий хотя бы один непробельный символ. :)
X[text()][normalize-space(.)]
(: Отобрать детей элемента X, у которых есть хотя бы один дочерний элемент. :)
X[node()]
(: Отобрать тех детей элемента X, которые содержат комментарий. :)
X[comment()]
(: Отобрать детей элемента X, у которых атрибут @a имеет числовое значение, меньшее 10. Это выражение одинаково хорошо работает в XPath 1.0 и XPath 2.0 независимо от того, имеет ли атрибут @a числовой или строковый тип. :)
X[number(@a) < 10]
<AAA> |
Выбирается корневой узел AAA |
<BBB/> |
/AAA |
<CCC/> |
Выбираются все элементы CCC, |
<BBB/> |
|
<BBB/> |
являющиеся дочерними по |
<DDD> |
отношению к корневому узлу |
<BBB/> |
AAA |
</DDD> |
/AAA/CCC |
<CCC/> |
|
</AAA> |
Выбираются все элементы BBB, |
|
|
|
являющиеся детьми элементов |
|
DDD, которые в свою очередь |
|
являются детьми корневого |
|
узла AAA |
|
/AAA/DDD/BBB |
<AAA>
<BBB/>
<CCC/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC>
<DDD>
<BBB/
>
<BBB/
>
</DDD>
</CCC>
<BBB/>
</AAA>
Выбрать все элементы BBB //BBB
Выбрать все элементы BBB, являющиеся детьми DDD
//DDD/BBB
Выбрать первого потомка BBB элемента AAA
/AAA/BBB[1]
Выбрать последнего потомка BBB элемента AAA
AAA/BBB[last()]
string-length
<AAA> |
Выбираются все элементы, имя которых |
состоит из трех символов |
|
<Q/> |
//*[string-length(name()) = 3] |
<SSSS/> |
|
<BB/> |
Выбираются все элементы, имя которых |
<CCC/> |
|
<DDDDDDDD/ состоит из двух или одного символа |
|
> |
//*[string-length(name()) < 3] |
<EEEE/>
</AAA>
