Алексей Валиков - Технология XSLT

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Технология XSLT"
Описание и краткое содержание "Технология XSLT" читать бесплатно онлайн.
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Элемент xsl:variable
Синтаксис этого элемента в XSLT определен так:
<xsl:variable
name="имя"
select="выражение">
<!-- Содержимое: шаблон -->
</xsl:variable>
Для объявления переменных в XSLT служит элемент xsl:variable, который может как присутствовать в теле шаблона, так и быть элементом верхнего уровня. Элемент xsl:variable связывает имя, указанное в обязательном атрибуте name, со значением выражения, указанного в атрибуте select или с деревом, которое является результатом выполнения шаблона, содержащегося в этом элементе. В том случае, если объявление переменной было произведено элементом верхнего уровня, переменная называется глобальной переменной. Переменные, определенные элементами xsl:variable в шаблонах (то есть не на верхнем уровне) называются локальными переменными.
Таким образом, объявление переменной в XSLT происходит всего в два шага:
□ сначала вычисляется значение присваиваемого выражения;
□ затем полученное значение связывается с указанным именем.
Значение присваиваемого выражения вычисляется в зависимости от того, как был определен элемент xsl:variable:
□ если в элементе xsl:variable определен атрибут select, то значением присваиваемого выражения будет результат вычисления выражения, указанного в этом атрибуте;
□ если атрибут select не определен, но сам элемент xsl:variable имеет дочерние узлы (иными словами, содержит шаблон), значением определяемой переменной будет результирующий фрагмент дерева, полученный в результате выполнения содержимого xsl:variable;
□ если атрибут select не определен и при этом сам элемент xsl:variable пуст, значением параметра по умолчанию будет пустая строка.
Использовать значения, присвоенные переменным при инициализации, можно, указывая впереди имени переменной символ "$", например для переменной x — $x. В XPath-выражениях синтаксис обращения к переменным соответствует продукции VariableReference.
Имя переменной соответствует синтаксическому правилу QName, иными словами, оно может иметь вид имя или префикс:имя. Как правило, имена переменным даются без префиксов, однако в том случае, если префикс все же указан, переменная ассоциирует с некоторым объектом не простое, а расширенное имя. Соответственно, обращение к объекту должно будет производиться также посредством расширенного имени.
Область видимости переменных
Каждая из переменных имеет собственную область видимости (англ. scope) — область, в которой может быть использовано ее значение. Область видимости определяется следующим образом.
□ Областью видимости глобальной переменной является все преобразование, то есть значение переменной, объявленной элементом верхнего уровня, может быть использовано в преобразовании где угодно. К такой переменной можно обращаться даже до ее объявления, единственным ограничением является то, что переменная не должна определяться через собственное значение — явно или неявно.
□ Локальную переменную можно использовать только после ее объявления и только в том же родительском элементе, которому принадлежит объявляющий элемент xsl:variable. В терминах XPath область видимости локальной переменной будет определяться выражением
following-sibling:node()/descendant-or-self:node().
Для того чтобы до конца прояснить ситуацию, приведем несколько примеров.
Предположим, что мы определяем переменную с именем ID и значением 4 следующим образом:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...
<xsl:variable name="ID" select="4"/>
...
</xsl:stylesheet>
Несложно видеть, что здесь мы определили глобальную переменную, а значит, ее значение можно использовать в преобразовании в любом месте. Например, мы можем определить через нее другие глобальные переменные, либо использовать в шаблоне:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...
<xsl:variable name="leaf" select="//item[@id=$ID]"/>
<xsl:variable name="ID" select="4"/>
<xsl:variable name="path" select="$leaf/ancestor-or-self::item"/>
...
</xsl:stylesheet>
Причем, как уже было сказано, глобальная переменная может быть использована и до объявления: в нашем случае переменная leaf определяется через переменную ID, a path — через leaf. Конечно же, не следует забывать и то правило, что переменные не могут объявляться посредством самих себя, явно или неявно. Очевидно, что объявление:
<xsl:variable name="ID" select="$ID - 1"/>
было бы некорректным ввиду явного использования переменной при собственном определении. Точно так же были бы некорректны определения:
<xsl:variable name="ID" select="$id — 1/>
<xsl:variable name="id" select="$ID + 1"/>
поскольку переменная ID определяется через переменную id, которая определяется через переменную ID и так до бесконечности.
Дела с локальными переменными обстоят чуть-чуть сложнее. Для того чтобы объяснить, что же такое область видимости, обратимся к следующему преобразованию.
Листинг 5.22. Преобразование, использующее переменные i, j, k и gt<xsl:stylesheet
version="1.0"
xmlns:xsl="... ">
<xsl:template match="/">
<xsl:variable
name="i"
select="2"/>
<xsl:variable
name="j"
select="$i - 1"/>
<xsl:if test="$i > $j">
<xsl:variable name="k">
<xsl:value-of select="$i"/>
<xsl:value-of select="$gt"/>
<xsl:value-of select="$j"/>
</xsl:variable>
<result>
<xsl:copy-of select="$k"/>
</result>
</xsl:if>
</xsl:template>
<xsl:variable name="gt">
is greater than
</xsl:variable>
</xsl:stylesheet>
В этом преобразовании определены три локальные переменные — i, j и k и одна глобальная переменная — gt. На следующих четырех листингах мы выделим серой заливкой область видимости переменной (то есть область, где ее можно использовать), а само определение переменной отметим полужирным шрифтом.
Листинг 5.23. Области видимости переменных i, j, k и gtОбласть видимости переменной i Область видимости переменной j
<xsl:stylesheet <xsl:stylesheet
version="1.0" xmlns:xsl="... "> version="1.0" xmlns:xsl="... ">
<xsl:template match="/"> <xsl:template match="/">
<xsl:variable name="i" <xsl:variable name="i"
select="2"/> select="2"/>
<xsl:variable name="j" <xsl:variable name="j"
select="$i - 1"/> select="$i - 1"/>
<xsl:if test="$i > $j"> <xsl:if test="$i > $j">
<xsl:variable name="k"> <xsl:variable name="k">
<xsl:value-of select="$i"/> <xsl:value-of select="$i"/>
<xsl:value-of select="$gt"/> <xsl:value-of select="$gt"/>
<xsl:value-of select="$j"/> <xsl:value-of select="$j"/>
</xsl:variable> </xsl:variable>
<result> <result>
<xsl:copy-of select="$k"/> <xsl:copy-of select="$k"/>
</result> </result>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
<xsl:variable name="gt"> <xsl:variable name="gt">
is greater than is greater than
</xsl:variable> </xsl:variable>
</xsl:stylesheet> </xsl:stylesheet>
Область видимости переменной k Область видимости переменной gt
<xsl:stylesheet <xsl:stylesheet
version="1.0" xmlns:xsl="... "> version="1.0" xmlns:xsl="... ">
<xsl:template match="/"> <xsl:template match="/">
<xsl:variable name="i" <xsl:variable name="i"
select="2"/> select="2"/>
<xsl:variable name="j" <xsl:variable name="j"
select="$i - 1"/> select="$i - 1"/>
<xsl:if test="$i > $j"> <xsl:if test="$i > $j">
<xsl:variable name="k"> <xsl:variable name="k">
<xsl:value-of select="$i"/> <xsl:value-of select="$i"/>
<xsl:value-of select="$gt"/> <xsl:value-of select="$gt"/>
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Технология XSLT"
Книги похожие на "Технология XSLT" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Алексей Валиков - Технология XSLT"
Отзывы читателей о книге "Технология XSLT", комментарии и мнения людей о произведении.