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

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

Жанры

Технология XSLT

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

Шрифт:

<a href="#">Home</a>

<a href="#">News</a>

<b>Profile</b>

<a href="#">Contact</a>

Попробуем теперь обработать элементы

menuitem
, не указывая значение параметра
current
:

<xsl:template match="menu">

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

</xsl:template>

Результат будет получен

в виде:

<b>Home</b>

<а href="#">News</a>

<а href="#">Profile</a>

<a href="#">Contact</a>

Этот фрагмент выходящего документа легко объяснить. Вследствие определения:

<xsl:param name="current" select="1"/>

значением параметра

current
по умолчанию является
1
, и поэтому в меню был выбран пункт с индексом
1
.

Мы упомянули, что значением параметра может быть дерево. Попробуем пояснить эту концепцию на примере генерации HTML-документа.

Итак, предположим, что мы генерируем выходящий документ следующим именованным шаблоном:

<xsl:template name="html">

 <xsl:param name="head">

<head>

<title>Title one</title>

</head>

 </xsl:param>

 <html>

<xsl:copy-of select="$head"/>

<body>

<xsl:text>content</xsl:text>

</body>

</html>

 </xsl:template>

Параметр

head
по умолчанию будет содержать дерево, состоящее из элемента
head
и его дочернего элемента
title
, который содержит текст "
Title one
". Результат выполнения вызова

<xsl:call-template name="html"/>

мы можем видеть на следующем листинге:

<html>

 <head>

<title>Title one</title>

 </head>

 <body>content</body>

</html>

Выделенный фрагмент относится к части дерева, которая была создана копированием значения параметра

head
.

Попробуем теперь передать в качестве параметра дерево, сгенерированное следующим шаблоном:

<xsl:template name="head">

 <head>

<title>Title two</title>

<style type="text/css">

H1 {border-width: 1; border: solid; text-align: center}

</style>

 </head>

</xsl:template>

Для

того чтобы передать результат выполнения этого шаблона в виде значения параметра
head
именованному шаблону
head
, воспользуемся следующей конструкцией:

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

 <xsl:with-param name="head">

<xsl:call-template name="head"/>

 </xsl:with-param>

</xsl:call-template>

Выходящий документ будет получен в виде:

<html>

 <head>

<title>Title two</title>

<style type="text/css">

H1 {border-width: 1; border: solid; text-align: center}

</style>

 </head>

 <body>content</body>

</html>

Выделенный фрагмент, как и в предыдущем случае, соответствует части документа, полученной при копировании значения параметра

head
.

Приведенные выше примеры демонстрируют, как можно собрать выходящий документ по кусочкам из фрагментов деревьев. При умелом использовании изложенные подходы позволяют добиться очень высокой гибкости и универсальности преобразований.

Глава 6

XPath-выражения

Выражения для XML-документов

По мере распространения XML-технологий и развития смежных с ними областей стали выделяться не только задачи, которые хорошо подходят для решения с помощью XML, но и задачи, которые нужно решать при программировании самих XML-приложений. Одной из таких задач является обращение к определенным частям XML-документа. Например, если нам нужно получить из документа, скажем, цену продукта, которая находится в атрибуте

value
элемента
price
, принадлежащему элементу
product
, сделать это при помощи стандартных SAX- или DOM-интерфейсов было бы, мягко говоря, не очень удобно. И это еще простой пример. Бывают, действительно, сложные случаи, когда нужно выбрать узел определенного типа, который может находиться в нескольких местах в документе, да еще и должен обладать заданными свойствами.

Для выполнения часто встречающихся задач такого рода был создан язык XPath, название которого расшифровывается, как XML Path — язык XML- путей. Главной задачей этого языка является адресация, или, по-другому, определение местоположения частей XML-документа. На практике это означает выбор в документе множества узлов, которые соответствуют определенным условиям расположения.

Помимо главной задачи, в XPath имеются также дополнительные функции для работы со строками, числами, булевыми значениями и множествами узлов. Поэтому на самом деле XPath — это много больше, чем просто язык адресации. XPath-выражения, являющиеся самой общей конструкцией языка, могут возвращать значения любого из основных типов (кроме результирующего фрагмента дерева — этот тип может быть использован только в XSLT).

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

Огненный князь

Машуков Тимур
1. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь

30 сребреников

Распопов Дмитрий Викторович
1. 30 сребреников
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
30 сребреников

Идеальный мир для Демонолога 5

Сапфир Олег
5. Демонолог
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Демонолога 5

Барон играет по своим правилам

Ренгач Евгений
5. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Барон играет по своим правилам

Газлайтер. Том 31

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

Развод с драконом. Отвергнутая целительница

Шашкова Алена
Фантастика:
фэнтези
4.75
рейтинг книги
Развод с драконом. Отвергнутая целительница

Измена. Свадьба дракона

Белова Екатерина
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Измена. Свадьба дракона

Живое проклятье

Алмазов Игорь
3. Жизнь Лекаря с нуля
Фантастика:
попаданцы
альтернативная история
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Живое проклятье

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

На границе империй. Том 10. Часть 7

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 7

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

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

Санек 4

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

Газлайтер. Том 14

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