Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Элемент xsl:with-param
Синтаксис этого элемента выглядит следующим образом:
name=" имя "
select=" выражение ">
Как можно заметить, элемент xsl:with-param
абсолютно идентичен элементу xsl:param
(отличаются только их имена). Практически настолько же похоже и их действие: элемент xsl:with-param
тоже связывает с именем параметра значение, и при выполнении шаблона это значение будет использоваться вместо значения параметра по умолчанию.
Таким образом, значение параметра, заданного в шаблоне, выбирается в соответствии со следующими положениями:
□ если в элементе, который вызывает этот шаблон, присутствует элемент xsl:with-param
, передающий значение этого параметра, в шаблоне будет использоваться переданное значение;
□ если в элементе, который вызывает этот шаблон, элемента xsl:with-param
, с соответствующим именем нет, в качестве значения параметра будет использоваться значение по умолчанию.
Элемент xsl:with-param
может использоваться только в качестве дочернего элемента xsl:apply-templates
и xsl:call-template
.
В качестве простого примера приведем шаблон, который выводит сокращение названия для недели по его номеру. Номер дня передается в шаблон параметром с именем day-number
.
Mon
Tue
Wed
Thu
Fri
Sat
Sun
Hmm...
Результатом вызова:
будет текстовый узел " Mon
". Рассмотрим теперь случай, когда параметра передано не было:
Шаблон выведет задумчивое Hmm...
, поскольку значение параметра day-number
будет по умолчанию нулем (атрибут select
имеет вид select="0"
) и в операторе выбора xsl:choose
сработает условие xsl:otherwise
.
Параметры могут быть использованы как в именованных, так и в неименованных шаблонах. Именованные шаблоны с параметрами ведут себя как самые настоящие функции — они могут вызываться с определенными параметрами вне зависимости от контекста, только чтобы выполнить какие-либо действия с переданными значениями. В случае обычных, неименованных шаблонов параметры могут предоставлять некую дополнительную информацию.
Представим себе описание меню в следующем формате:
Для того чтобы при обработке особым образом выделять текущую страницу, определим в шаблоне параметр current
и будем выводить название страницы в элементе b
(от англ. bold — полужирный), если значение current
равно индексу данного пункта меню; если текущая страница и индекс пункта меню не совпадают, то выводиться будет ссылка.
Результатом выполнения шаблона
будет фрагмент меню вида
Home
News
Profile
Contact
Попробуем теперь обработать элементы menuitem
, не указывая значение параметра current
:
Результат будет получен в виде:
Home
<���а href="news.htm">News
<���а href="profile.htm">Profile
Contact
Этот фрагмент выходящего документа легко объяснить. Вследствие определения:
значением параметра current
по умолчанию является 1
, и поэтому в меню был выбран пункт с индексом 1
.
Мы упомянули, что значением параметра может быть дерево. Попробуем пояснить эту концепцию на примере генерации HTML-документа.
Итак, предположим, что мы генерируем выходящий документ следующим именованным шаблоном:
content
Параметр head
по умолчанию будет содержать дерево, состоящее из элемента head
и его дочернего элемента title
, который содержит текст " Title one
". Результат выполнения вызова
мы можем видеть на следующем листинге:
content
Выделенный фрагмент относится к части дерева, которая была создана копированием значения параметра head
.
Попробуем теперь передать в качестве параметра дерево, сгенерированное следующим шаблоном:
H1 {border-width: 1; border: solid; text-align: center}
Для того чтобы передать результат выполнения этого шаблона в виде значения параметра head
именованному шаблону head
, воспользуемся следующей конструкцией:
Выходящий документ будет получен в виде:
H1 {border-width: 1; border: solid; text-align: center}
content
Выделенный фрагмент, как и в предыдущем случае, соответствует части документа, полученной при копировании значения параметра head
.
Приведенные выше примеры демонстрируют, как можно собрать выходящий документ по кусочкам из фрагментов деревьев. При умелом использовании изложенные подходы позволяют добиться очень высокой гибкости и универсальности преобразований.
Глава 6
XPath-выражения
Выражения для XML-документов
По мере распространения XML-технологий и развития смежных с ними областей стали выделяться не только задачи, которые хорошо подходят для решения с помощью XML, но и задачи, которые нужно решать при программировании самих XML-приложений. Одной из таких задач является обращение к определенным частям XML-документа. Например, если нам нужно получить из документа, скажем, цену продукта, которая находится в атрибуте value
элемента price
, принадлежащему элементу product
, сделать это при помощи стандартных SAX- или DOM-интерфейсов было бы, мягко говоря, не очень удобно. И это еще простой пример. Бывают, действительно, сложные случаи, когда нужно выбрать узел определенного типа, который может находиться в нескольких местах в документе, да еще и должен обладать заданными свойствами.
Для выполнения часто встречающихся задач такого рода был создан язык XPath, название которого расшифровывается, как XML Path — язык XML- путей. Главной задачей этого языка является адресация, или, по-другому, определение местоположения частей XML-документа. На практике это означает выбор в документе множества узлов, которые соответствуют определенным условиям расположения.
Помимо главной задачи, в XPath имеются также дополнительные функции для работы со строками, числами, булевыми значениями и множествами узлов. Поэтому на самом деле XPath — это много больше, чем просто язык адресации. XPath-выражения, являющиеся самой общей конструкцией языка, могут возвращать значения любого из основных типов (кроме результирующего фрагмента дерева — этот тип может быть использован только в XSLT).
В языке XSLT очень часто используются XPath-выражения — во всех вычислениях, выборках, сравнениях и так далее, XSLT опирается на XPath. В XPath есть арифметические и логические операции, а также библиотека базовых функций (которые, правда, дополняются некоторыми функциями XSLT). Можно с уверенностью заявить, что без знания языка XPath будет невозможно создавать реально функционирующие преобразования.
Читать дальшеИнтервал:
Закладка: