XSL - трансформация


С помощью XSL можно трансформировать XML документ в любой вид, будь то HTML, WML, RTF, PDF, SQL, даже в SWF (flash запускаемый модуль), а так же в XML и XSL. XSL несёт в себе информацию о том, как будет оформлен документ, где и как должны распологаться данные.

Трансформация

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

XML документ позволяет задать древовидную структуру. Разместить данные по степени подчинения или наследования. Можно задать данные так, как это удобно или так как требует ситуация, не задумываясь о том, как эти данные будут выводиться в браузер на принтер и т.п. XSL позволяет трансформировать документ так, как это необходимо, разместить данные в правильном порядке, отсортировать их, скрыть ненужные данные, разместить правильно ссылки. Вывести их красиво в браузер или другие программы (например в векторный формат CorelDraw).

XSL-T процессор это некое серверное приложение, которое на вход получает XML и XSL документы, а на выход отдает результат трансформации, такое приложение можно назвать парсером.

На данный момент имеются решения базирующиеся на платформах MS Windows NT и Unix. Для MS Windows имеется 3 решения Apache+Cocoon+JServ, Apache/IIS+Resin и IIS+Микрософтовский парсер третей версии. Для Unix подходят только первые два. Микрософт предлагал свой вариант XSL от которого мы вынужденны были отказаться в результате проведённых исследований и который поддерживался парсерами Микрософт до 3 версии. MSIE поддерживат 2 версию XSL, существует update который может заставить IE 5.0 разбирать документы парсером 3-й версии в соответствии со стандартом W3C.

Для того, чтобы обработать XML документ c помощю XSL, необходимо в XML документе написать следующую инструкцию:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="my-style.xsl"?>

<root>
	<!-- ... -->
</root>

XSL

Язык XSL состоит из трёх с половиной десятков инструкций, которые будут описаны ниже, все они имеют общий вид:
<пространство-имен:имя-инструкции [атрибут="значение" [атрибут="значение"]]>
</пространство-имён:имя-инструкции>,

где пространство-имен обычно "xsl", но могут использоваться и другие.

XSL документ всегда является состоятельным XML документом и имеет следующую структуру:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<!-- набор инструкций -->
	</xsl:template>
	<!-- ... -->
</xsl:stylesheet>

xsl:stylesheet - является корневым элементом для любого XSL документа. В него могут быть вложены теги верхнего уровня. (xsl:transform - синоним для xsl:stylesheet)

Тэги верхнего уровня:
(top-level-elements)
Инструкции, используемые внутри xsl:template:
(instructions)
Дерево возможных вложений XSL тэгов

Instructions:
Применение XSL

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

XSL позволяет трансформировать документ так, как это необходимо, разместить данные в правильном порядке, отсортировать их, скрыть ненужные данные, разместить правильно ссылки. Вывести их красиво в браузер или другие программы (например в векторный формат CorelDraw).

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


Мнемонические сокращения:
 display  XSL
& - &amp;
< - &lt;
> - &gt;
' - &apos;
" - &quot;
&nbsp; - &#160;


Тэги с атрибутами не имеющими значения пишуться следующим образом:
<OPTION selected="selected">


Описание XSL тэгов

Атрибуты, выделеные жирным шрифтом, являются обязательными для тега, не выделенные - могут опускаться.



<xsl:apply-imports />
Вставляет вместо себя шаблон перекрытый данным, подключённый ранее тэгом xsl:import


<xsl:apply-templates
    select = node-set-expression
    mode = qname>
    <!-- Можно использовать: (xsl:sort | xsl:with-param)* -->
</xsl:apply-templates>
Вызывает шаблоны, соблюдая условие указанное в select и подчиненные XML тегу, который обрабатывается. Select - содержит в себе выражение XPath, которое является критерием выбора шаблонов для обработки. Может отсутствовать, тогда проходятся все тэги нижнего уровня.
Mode - может использоваться для разделения шаблонов с одинаковыми именами или критериями выбора. Шаблон должен иметь то же имя mode, что и вызывающий его xsl:apply-templates.
вход <?xml version="1.0" ?> <?cocoon-format type="text/xml"?> <?cocoon-process type="xslt"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <index> <item>Part 1</item> <item>Part 2</item> <item>Part 3</item> </index>
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="index"> <xsl:processing-instruction name="cocoon-format">type="text/html"</xsl:processing-instruction> <HTML> <BODY> <OL> <xsl:apply-templates select="item" /> </OL> </BODY> </HTML> </xsl:template> <xsl:template match="item"> <LI><xsl:value-of select="text()" /></LI> </xsl:template> </xsl:stylesheet>
выход
  1. Part 1
  2. Part 2
  3. Part 3


<xsl:attribute
    name = { qname }
    namespace = { uri-reference }>
    <!-- Можно использовать: instructions -->
</xsl:attribute>
Создаёт атрибут для предшествующего тэга или тега, создаваемого инструкцией xsl:element Name - имя создаваемого атрибута
Namespace - пространство имён для создаваемого атрибута.
вход <word> <xsl:attribute name="count" namespace="wsl">10</xsl:attribute> </word>
выход <word ns0:count="10" xmlns:ns0="wsl" />


<xsl:attribute-set
    name = qname
    use-attribute-sets = qnames>
    <!-- Можно использовать: xsl:attribute* -->
</xsl:attribute-set>
Используется для определения атрибутов
Name - задаёт имя блока атрибутов
Use-attribute-sets - используется для определения use-attribute-sets у xsl:element и xsl:copy
вход <?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="index"> <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction> <root> <xsl:apply-templates select="item" /> </root> </xsl:template> <xsl:template match="item"> <item xsl:use-attribute-sets="title-style"> <xsl:value-of select="." /> </item> </xsl:template> <xsl:attribute-set name="title-style"> <xsl:attribute name="font-size">12pt</xsl:attribute> <xsl:attribute name="font-weight">bold</xsl:attribute> </xsl:attribute-set> </xsl:stylesheet>
выход <?xml version="1.0" encoding="UTF-8" ?> <root> <item font-size="12pt" font-weight="bold">Part 1</item> <item font-size="12pt" font-weight="bold">Part 2</item> <item font-size="12pt" font-weight="bold">Part 3</item> </root>


<xsl:call-template
    name = qname>
    <!-- Можно использовать: xsl:with-param* -->
</xsl:call-template>
Вызывает указанный темплайт (по сути является аналогом процедуры)
Name - имя вызываемого шаблона. (XPath не применим)
вход <xsl:template match="/"> <xsl:call-template name="my_procedure" /> </xsl:template> <xsl:template name="my_procedure"> <MyProcedureWork>yes!</MyProcedureWork> </xsl:template>
выход <MyProcedureWork>yes!</MyProcedureWork>


<xsl:choose>
    <!-- Можно использовать: (xsl:when+, xsl:otherwise?) -->
</xsl:choose>
Организует выбор согласно условиям, определёнными в xsl:when, и, если не выполняется ни одно из условий, то выполняется инструкция xsl:otherwise
вход <xsl:choose> <xsl:when test="text()='Part 2'">It's Part Two<BR/></xsl:when> <xsl:otherwise>It's No Part Two<BR/></xsl:otherwise> </xsl:choose>
выход It's No Part Two
It's Part Two
It's No Part Two


<xsl:comment>
    <!-- Можно использовать: instructions -->
</xsl:comment>
Порождает коментарий HTML.
вход <xsl:comment>commentary here!</xsl:comment>
выход <!-- commentary here! -->


<xsl:copy     use-attribute-sets = qnames>
    <!-- Можно использовать: instructions -->
</xsl:copy>
Копирует обрабатываемый тэг, без атрибутов.
Use-attribute-sets - указывает на блок атрибутов, которые необходимо создать. (см. xsl:attribute-set)
вход <?xml version="1.0" ?> <?cocoon-format type="text/xml"?> <?cocoon-process type="xslt"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <index param="index parameter"> <item>Part 1</item> <item>Part 2</item> <item>Part 3</item> </index>
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="index"> <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction> <xsl:copy> <xsl:value-of select="@param"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
выход <?xml version="1.0" ?> <index>index parameter</index>


<xsl:copy-of
    select = expression />
Копирует тэги и/или атрибуты в зависимости от expression
select - выражение XPath, определяющее критерий копирования.
вход <?xml version="1.0" ?> <?cocoon-format type="text/xml"?> <?cocoon-process type="xslt"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <index param="1" attrib="2"> <caption name="Content"/> <item> <subitem param="3">val1</subitem> <subitem>val2</subitem> </item> </index>
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="index"> <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction> <newindex> <xsl:copy-of select="@*"/> <xsl:apply-templates select="item"/> </newindex> </xsl:template> <xsl:template match="item"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet>
выход <?xml version="1.0" ?> <newindex param="1" attrib="2"> <item> <subitem param="3">val1</subitem> <subitem>val2</subitem> </item> </newindex>


<xsl:decimal-format
    name = qname
    decimal-separator = char
    grouping-separator = char
    infinity = string
    minus-sign = char
    NaN = string
    percent = char
    per-mille = char
    zero-digit = char
    digit = char
    pattern-separator = char />
Определяет формат числа.
Name - определяет имя десятичного формата
Decimal-separator - определяет десятичную точку, по умолчанию - "."
Grouping-separator - определяет груповой разделитель, по умолчанию - ","
Infinity - определяет строку представляющую бесконечность, по умолчанию - "Infinity"
Minus-sign - определяет знак минуса, по умолчанию - "-" (#x2D)
NaN - определяет строку представляющую неопределённое значение, по умолчанию - "NaN"
Percent - определяет знак процента, по умолчанию - "%"
Per-mile - определяет символ мили, по умолчанию - уникодный символ #x2030
Zero-digit - определяет символ нуля, по умолчанию - "0"
Digit - определяет символ используемый для форматирования образца, по умолчанию - "#"
Pattern-separator - определяет символ для разделения "подобразцов" в образце, по умолчанию - ";"


<xsl:element
    name = { qname }
    namespace = { uri-reference }
    use-attribute-sets = qnames>
    <!-- Можно использовать: instructions -->
</xsl:element>
Создаёт тэг.
Name - имя создаваемого тэга
Namespace - пространство имён для этого тэга.
Use-attribute-sets - указывает на блок атрибутов, которые необходимо создать. (см. xsl:attribute-set)
вход <xsl:element name="MyTag">MyValue</xsl:element>
выход <MyTag>MyValue</MyTag>


<xsl:fallback>
    <!-- Можно использовать: instructions -->
</xsl:fallback>
Обычно, xsl:fallback не делает ничего. Но когда XSL-T находит ошибку несовпадения версии, должны выполняться инструкции написнные в xsl:fallback


<xsl:for-each
    select = node-set-expression>
    <!-- Можно использовать: (xsl:sort*, instructions) -->
</xsl:for-each>
Организует цикл по указанному критерию.
Select - Выражение XPath, определяющее множество, обрабатываемое циклом.
вход <?xml version="1.0" ?> <?cocoon-format type="text/xml"?> <?cocoon-process type="xslt"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <index> <item>Part 2</item> <item>Part 1</item> <item>Part 3</item> </index>
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="index"> <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction> <xsl:for-each select="item"> <xsl:value-of select="."/> </xsl:for-each> </xsl:template> </xsl:stylesheet>
выход Part 2
Part 1
Part 3


<xsl:if
    test = boolean-expression>
    <!-- Можно использовать: instructions -->
</xsl:if>
Проверка. Содержимое выполняется весли boolean-expression возвращает истину. Условия "иначе" не имеет.
test - задаёт условие из выражений XPath.
вход <xsl:if test="text()='Part 2'">Wow! Part 2</xsl:if> <xsl:if test="text()!='Part 2'">It's not Part 2</xsl:if>
выход Wow! Part 2
It's not Part 2
It's not Part 2


<xsl:import
    href = uri-reference />
Импортирует XSL файл в текущий документ, при этом импортируемые шаблоны перекроются имеющимися в случае совпадения имён.
href - Ссылка на XSL документ.


<xsl:include
    href = uri-reference />
Вставляет XSL файл в текущий документ.
href - Ссылка на XSL документ.


<xsl:key
    name = qname
    match = pattern
    use = expression />
Используется для определения имени ключа
Name - имя ключа
Match - выражение XPath, определяющее множество тэгов к которым имеет отношение данный ключ
Use - определяет значение ключа
вход <prototype name="key" return-type="node-set"> <arg type="string"/> <arg type="object"/> </prototype> ... <function>key</function>
<xsl:key name="func" match="prototype" use="@name"/> <xsl:template match="function"> <B> <A HREF="#{generate-id(key('func',.))}"> <xsl:apply-templates/> </A> </B> </xsl:template> <xsl:template match="prototype"> <A NAME="{generate-id()}"> <B>Function: </B> ... </A> </xsl:template>
выход ...


<xsl:message
    terminate = "yes" | "no">
    <!-- Можно использовать: instructions -->
</xsl:message>
Создаёт сообщение, которое XSL-T процессор пишет в лог-файл.
Terminate - говорит о том, надо прервать выполнение или нет.
вход <messages> <message name="problem">A problem was detected.</message> <message name="error">An error was detected.</message> </messages>
<xsl:param name="lang" select="en"/> <xsl:variable name="mess" select="document(concat('resources/', $lang, '.xml'))/messages"/> <xsl:template name="localized-message"> <xsl:param name="name"/> <xsl:message> <xsl:value-of select="$mess/message[@name=$name]"/> </xsl:message> </xsl:template> <xsl:template name="problem"> <xsl:call-template name="localized-message"/> <xsl:with-param name="name">problem</xsl:with-param> </xsl:call-template> </xsl:template>
выход A problem was detected.


<xsl:namespace-alias
    stylesheet-prefix = prefix | "#default"
    result-prefix = prefix | "#default" />
Определяет пространство имён альтернативное или заменяющее "xsl". Реально необходимо, при генерации XSL посредством XSL.
Самыми важными являются атрибуты xmlns:, в ниструкции xsl:stylesheet. В них должны быть прописанны правильные пути.
Stylesheet-prefix - пространство имён необходимое для работы XSL.
Result-prefix - используемое пространство имён.
вход <?xml version="1.0" ?> <x:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/TransformAlias" xmlns:x="http://www.w3.org/1999/XSL/Transform"> <x:output method="xml" indent="yes" /> <x:namespace-alias stylesheet-prefix="xsl" result-prefix="x" /> <x:template match="root"> <xsl:template match="/"> <xsl:copy-of select="." /> </xsl:template> </x:template> </x:stylesheet>
выход <?xml version="1.0" ?> <xsl:template match="/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:copy-of select="." /> </xsl:template>


<xsl:number
    level = "single" | "multiple" | "any"
    count = pattern
    from = pattern
    value = number-expression
    format = { string }
    lang = { nmtoken }
    letter-value = { "alphabetic" | "traditional" }
    grouping-separator = { char }
    grouping-size = { number } />
Используется для форматирования числа.
Level - Говорит о том, какие уровни исходного дерева должны рассмотреться.
Count -
From -
Value - число, которое будет отформатированно.
Format - правило для форматирования числа. (a - буквенный список, 1 - арабские цыфры, i - римские цифры)
Lang -
letter-value -
grouping-separator - должен задавать разделитель группы цифр.
grouping-size - размер группы, работает только для арабской нумерации.
вход <xsl:for-each select="item"> <P> <xsl:number value="position()" format="i. " /> <xsl:value-of select="text()" /> </P> </xsl:for-each>
выход i. Part 1
ii. Part 2
iii. Part 3


<xsl:otherwise>
    <!-- Можно использовать: instructions -->
</xsl:otherwise>
Выполняется если ни одно из условий в определённых в инструкциях xsl:when вложенных в xsl:choose не является истинным. Для xsl:choose не является обязательным.


<xsl:output
method = "xml" | "html" | "text" | qname-but-not-ncname
version = nmtoken
encoding = string
omit-xml-declaration = "yes" | "no"
standalone = "yes" | "no"
doctype-public = string
doctype-system = string
cdata-section-elements = qnames
indent = "yes" | "no"
media-type = string />
Определяет формат трансформированного документа.
Method - метод вывода "html" или "xml"
Version -
Encoding - определяет кодировку выходного документа
omit-xml-declaration -
standalone -
doctype-public -
doctype-system -
cdata-section-elements -
indent - создавать ли отступы.
media-type - определяет тип выходного документа
вход <xsl:output method="html" media-type="text/html"/>
выход <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">


<xsl:param
    name = qname
    select = expression>
    <!-- Можно использовать: instructions -->
</xsl:param>
Определяет имя параметра. Используется для получения глобальных переменных, либо для передачи параметров между шаблонами созданными инструкцией xsl:template совместно с xsl:with-param. Может получать параметры из строки браузера, если они соврадают по имени.
Name - задаёт имя параметра.
Select - выражение XPath, определяющее значение параметра. (значение можно задать внутри тэга). Для корректной работы, при вызове шаблона без параметра, значение надо задавать всегда. Если параметр передан при вызове с помощью инструкции xsl:with-param, то переданное значение переопределит значение по умолчанию.


<xsl:preserve-space
    elements = tokens />
Пытается сохранить форматирование используемое текущим XSL документом.
Elements -


<xsl:processing-instruction
    name = { ncname }>
    <!-- Можно использовать: instructions -->
</xsl:processing-instruction>
Используется для передачи инструкций XSL-T процессору
name - имя инструкции препроцессора

Типовые инструкции: <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction> определяет вормат выходного документа. <xsl:processing-instruction name="cocoon-process">type="xsp"</xsl:processing-instruction> говорит о том, что необходимо запустить XSP процессор. <xsl:processing-instruction name="cocoon-process">type="xslt"</xsl:processing-instruction> говорит о том, что необходимо запустить XSL-T процессор. <xsl:processing-instruction name="xml-stylesheet">href="a.xsl" type="text/xsl"</xsl:processing-instruction> сообщает препроцессору имя XSL документа, который должен быть запущен после обработки текущим XSL документом. <xsl:processing-instruction name="xml-stylesheet">href="book.css" type="text/css"</xsl:processing-instruction>


<xsl:sort
    select = string-expression
    lang = { nmtoken }
    data-type = { "text" | "number" | qname-but-not-ncname }
    order = { "ascending" | "descending" }
    case-order = { "upper-first" | "lower-first" } />
Указывает критерий сортировки для xsl:for-each и xsl:apply-templates
select - выражение XPath, определяющее множество, по которому должна производиться сортировка
lang - язык
data-type - определяет тип данных по которому производиться сортировка (по умолчанию text)
    text - воспринимать данные как строку
    number - воспринимать данные как цифры
    qname - Квалифицированное имя или вырадение XPath, поведение не определено.
order - говорит о том, какая должна быть сортировка прямая (ascending) или обратная (descending)
case-order - говорит о том, какие буквы строчные (lower-first) или заглавные (upper-first) идут впереди в сортировке
вход <people> <person> <first>Андрей</first> <last>Трушин</last> </person> <person> <first>Андрей</first> <last>Нефёдкин</last> </person> <person> <first>Максим</first> <last>Ларичев</last> </person> </people>
<xsl:template match="people"> <OL> <xsl:apply-templates select="person"> <xsl:sort select="last"/> <xsl:sort select="first"/> </xsl:apply-templates> </OL> </xsl:template> <xsl:template match="person"> <LI> <xsl:value-of select="first"/> <xsl:text> </xsl:text> <xsl:value-of select="last"/> </LI> </xsl:template>
выход 1. Максим Ларичев
2. Андрей Нефёдкин
3. Андрей Трушин


<xsl:strip-space
    elements = tokens /> Должно удалять все пробелы из форматирования.
Elements -


<xsl:stylesheet
    id = id
    extension-element-prefixes = tokens
    exclude-result-prefixes = tokens
    version = number>
    <!-- Можно использовать: (xsl:import*, top-level-elements) -->
</xsl:stylesheet>
id - идентификатор
extension-element-prefixes - может использоваться для расширения пространства имён.
exclude-result-prefixes - может использоваться для расширения пространства имён.
version - версия таблицы стилей, обычно "1.0"
вход <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ... </xsl:stylesheet>
выход ...


<xsl:template
    match = pattern
    name = qname
    priority = number
    mode = qname>
    <!-- Можно использовать: (xsl:param*, instructions) -->
</xsl:template>
Определяет шаблон для обработки тэга или группы тэгов, указанных в атрибуте match.
Match - вырадение XPath, определяющее множество тэгов XML, которые должны быть обработанны данным шаблоном.
Name - определяет имя шаблона. (например для вызова при помощи инструкции xsl:call-template)
Priority - определяет приоритетность шаблона, при пересечении множеств будет выбран шаблон с большим приоритетом.
Mode - дополнительный критерий, если инструкция xsl:apply-templates содержит в себе атрибут mode то из всех шаблонов которые могут обработать XML документ будет выбран тот, у которого совпадает mode, либо если не совпадает не одна, будет запущен "предопределённый по умолчанию шаблон".
вход <xsl:template match="tag" mode="norm"> <LI> <xsl:value-of select="name" /> </LI> </xsl:template>
выход ...


<xsl:text
    disable-output-escaping = "yes" | "no">
    <!-- Можно использовать: #PCDATA -->
</xsl:text>
Вставляет преформатированный кусок текста, учитывая все пробелы, табуляции и т.п. disable-output-escaping - Запрещает преобразовывть такие символы как "&", ">" в альтернативное написание, команда <xsl:text disable-output-escaping="yes"><</xsl:text> даст на выходе один символ - "<"
вход <P> <xsl:text> string one string two more strings </xsl:text> </P>
выход <P> string one string two more strings </P>


<xsl:transform
    id = id
    extension-element-prefixes = tokens
    exclude-result-prefixes = tokens
    version = number>
    <!-- Можно использовать: (xsl:import*, top-level-elements) -->
</xsl:transform>
Синоним, для инструкции xsl:stylesheet. id - идентификатор
extension-element-prefixes - может использоваться для расширения пространства имён.
exclude-result-prefixes - может использоваться для расширения пространства имён.
version - версия таблицы стилей, обычно "1.0"


<xsl:value-of
    select = string-expression
    disable-output-escaping = "yes" | "no" />
Возвращает значение атрибута, тега, дерева. Результат зависит от того, что написано в атрибуте select.
Select - выражение XPath
disable-output-escaping - Запрещает преобразовывть такие символы как "&", ">" в альтернативное написание.
вход <xsl:value-of select="/index/@param"/>
выход index parameter


<xsl:variable
    name = qname
    select = expression>
    <!-- Можно использовать: instructions -->
</xsl:variable>
Определяет переменную, которую можно использовать в конструкциях XPath как $qname. Переменная не может быть переопределена в зоне видимости xsl:template, если она локальная, или во всей таблице стилей xsl:stylesheet, если она глобальная, например для изменения значений в итерациях цикла.
Name - задаёт имя переменной.
Select - выражение XPath, определяющее значение переменной. (значение можно задать внутри тэга)
вход <xsl:template match="item"> <xsl:variable name="body" select="text()"/> <xsl:value-of select="$body"/><BR/> </xsl:template>
выход Part 1
Part 2
Part 3


<xsl:when
    test = boolean-expression>
    <!-- Можно использовать: instructions -->
</xsl:when>
Задаёт условие и если оно истинно, выполняет своё содержимое, используется вместе с xsl:choose.
Test - задаёт условие из выражений XPath.


<xsl:with-param
    name = qname
    select = expression>
    <!-- Можно использовать: instructions -->
</xsl:with-param>
Использутся для передачи параметра в шаболн.
Name - Имя параметра
Select - Выражение XPath, определяющее значение параметра. (значение можно задать внутри тэга)
вход <xsl:apply-templates> <xsl:with-param name="value">Part 3</xsl:with-param> </xsl:apply-templates> ... <xsl:template match="item"> <xsl:param name="value" select="none"/> <xsl:if test="$value!='none'"> value = <xsl:value-of select="$value"/> </xsl:if> </xsl:template>
выход Value = Part 3




































xsl:attribute
xsl:attribute-set
xsl:apply-imports
xsl:apply-templates
xsl:call-template
xsl:choose
xsl:comment
xsl:copy
xsl:copy-of
xsl:decimal-format
xsl:element
xsl:fallback
xsl:for-each
xsl:if
xsl:import
xsl:include
xsl:key
xsl:message
xsl:namespace-alias
xsl:number
xsl:output
xsl:otherwise
xsl:param
xsl:preserve-space
xsl:processing-instruction
xsl:sort
xsl:strip-space
xsl:template
xsl:text
xsl:value-of
xsl:variable
xsl:when
xsl:with-param
Hosted by uCoz