Алексей Валиков - Технология 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 будет невозможно создавать реально функционирующие преобразования.
Читать дальшеИнтервал:
Закладка: