Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Конечно, это не точно то же самое — на самом деле мы получаем не значение, а дерево, содержащее это значение, но для строковых и численных значений особой разницы нет: дерево будет вести себя точно так же, как число или строка. Для булевых значений и множеств узлов приходится изыскивать другие методы. Булевое значение можно выразить через условие, например:
select="( значение 1 and условие1 ) or ( значение2 and not( условие2 ))"/>
Для множества узлов можно использовать предикаты и операции над множествами:
select=" значение1 [ условие1 ] | значение2 [not( условие2 )]"/>
Заметим, что шаблон, содержащийся в элементе xsl:variable
, может включать в себя такие элементы, как xsl:call-template
, xsl:apply-templates
и так далее. То есть переменной можно присвоить результат выполнения одного или нескольких шаблонов.
Использование внешних документов в преобразовании, как правило, сопровождается громоздкими выражениями вида:
document('http://www.xmlhost.com/docs/а.xml')/page/request/param
и так далее.
Для того чтобы при обращении к внешнему документу не использовать каждый раз функцию document
, можно объявить переменную, которая будет содержать корневой узел этого документа, например:
name="a.xml"
select="document('http://www.xmlhost.com/docs/a.xml')"/>
После этого к документу http://www.xmlhost.com/docs/a.xml
можно обращаться посредством переменной с именем a.xml
, например:
Параметры
Параметры в XSLT практически полностью идентичны переменным. Они точно так же связывают с объектом имя, посредством которого в дальнейшем можно к этому объекту обращаться. Главным различием является то, что значение, данное параметру при инициализации, является всего лишь значением по умолчанию, которое может быть переопределено при вызове.
До сих пор мы говорили о шаблонах, как о правилах, часто используя эти слова как синонимы. Попробуем теперь немного сменить угол зрения и представить их как функции , каждая из которых преобразует некоторый узел и возвращает фрагмент дерева в качестве результата. С этой точки зрения параметры шаблонов являются ни чем иным, как аргументами этих функций.
Работа с параметрами обеспечивается двумя элементами — xsl:param
, который объявляет в шаблоне новый параметр и xsl:with-param
, который указывает значение параметра при вызове шаблона.
Элемент xsl:param
Синтаксически этот элемент задается как:
name=" имя "
select=" выражение ">
Элемент xsl:template
, задающий в преобразовании шаблонное правило, может включать несколько элементов xsl:param
, которые и будут определять параметры этого шаблона. Кроме этого, xsl:param
может указываться в виде элемента верхнего уровня — в этом случае он будет определять глобальный параметр.
Элемент xsl:param
объявляет параметр с именем, которое задается обязательным атрибутом name
. Имя параметра может иметь расширенную форму, например "user:param"
, но чтобы не возиться с пространствами имен, на практике имена всегда дают простые — типа "i"
или "myParam"
.
Параметру может быть присвоено значение по умолчанию — то есть значение, которое будет использоваться в случае, если параметра с таким именем шаблону передано не было. Значение по умолчанию вычисляется следующим образом:
□ если в элементе xsl:param
определен атрибут select
, то значением по умолчанию будет результат вычисления выражения, указанного в этом атрибуте;
□ если атрибут select
не определен, но сам элемент xsl:param
имеет дочерние узлы, то значением определяемого параметра по умолчанию будет фрагмент дерева, полученного в результате выполнения содержимого xsl:param
;
□ если атрибут select
не определен и при этом сам элемент xsl:param
пуст, то значением параметра по умолчанию будет пустая строка.
Элемент
создаст параметр, значением которого по умолчанию будет 4
. Точно такой же эффект будет иметь элемент
25
" и тем более не множество, состоящее из текстового узла со значением 25
. Значением параметра x
по умолчанию будет результирующий фрагмент дерева, корень которого будет иметь единственный текстовый узел со значением " 25
" (рис. 5.3).

Рис. 5.3. Фрагмент дерева, который будет значением параметра x по умолчанию
Не стоит пугаться такой структуры в качестве значения параметра. То, что параметр x
вдруг будет содержать дерево, ничуть не ограничивает его использование, ведь дерево при потребности может быть приведено к числу или к строке; к множеству узлов же не может быть приведен ни один тип данных.
Напомним, что при приведении дерева к булевому типу, результатом всегда будет истина. Дерево всегда содержит как минимум корневой узел, и поэтому оно никогда не будет считаться пустым.
Определение параметра вида:
то есть когда в нем нет ни атрибута select
, ни содержимого, присвоит параметру пустую строку, то есть будет эквивалентно
Точно так же, как и в случае с переменными, значение заданного в шаблоне параметра можно использовать в выражениях, добавляя перед именем параметра префикс " $
". К примеру, значение нашего параметра x может быть получено конструкцией вида $x
.
Для того чтобы передать в шаблон определенные значения параметров, элементы, которые вызывают этот шаблон, должны содержать один или несколько элементов xsl:with-param
, который мы рассмотрим чуть ниже. Глобальные параметры, объявленные элементами xsl:param
верхнего уровня, также могут быть переданы преобразованию, однако конкретный механизм реализации этой передачи целиком и полностью зависит от реализации конкретного процессора.
Область видимости параметров
Область видимости параметров определяется в точности так же, как область видимости переменных. Единственным, на что следует обратить здесь внимание — это то, что элементы xsl:param
, определяемые в шаблонах, должны всегда быть его первыми дочерними элементами. Поэтому область видимости локальных параметров определяется несколько легче, чем область видимости локальных переменных: после определения параметр может использоваться в том шаблоне где угодно.
Прямым следствием из этого является то, что один шаблон не может иметь двух параметров с одинаковыми именами, поскольку их области видимости будут обязательно пересекаться, ведь один из параметров в любом случае будет следовать за другим.
Читать дальшеИнтервал:
Закладка: