Вредоносное ПО (malware) - это назойливые или опасные программы,...
XSLT-преобразования
XSLT обладает большими возможностями для оперирования данными в документах XML. Например, при помощи таблицы стилей (stylesheet) XSLT я мог бы отформатировать данные из planets.xml в таблицу HTML. Таблицы стилей содержат правила, установленные для преобразования XML-документа, и большая часть книги посвящена созданию таблиц стилей и объяснению того, как они работают. Вот как выглядит таблица стилей XSLT planets.xsl (листинг 1.2), преобразующая данные из planets.xml в таблицу HTML (мы проанализируем ее в главе 2).
Листинг 1.2. planets.xsl
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> The Planets Table The Planets Table Как видите, эта таблица стилей XSLT выглядит как XML-документ - и для этого есть основания, потому что она им и является. Все таблицы стилей XSLT являются также и документами XML, а раз так, то они должны быть хорошо форматированными документами XML С этими двумя документами - planets.xml (листингом 1.1) и связанной с ним таблицей стилей, planets.xsl (листинг 1.2) - мы будем работать на протяжении всей книги, рассматривая различные возможные преобразования XSLT. Как вы свяжете эту таблицу стилей с XML-документом planets.xml ? Как мы увидим в следующей главе, одним из способов это сделать является инструкция обработки XML , использующая два атрибута. Первый атрибут - type , который следует установить в «text/xml», чтобы указать, что используется таблица стилей XSLT. (Чтобы использовать таблицы стилей другого типа - каскадирующие таблицы стилей (CSS, cascading stylesheets), обычно использующиеся с HTML - следует задать «text/css».) Второй атрибут - href , которому следует присвоить значение URI (вспомните, что XML использует не адреса URL, а идентификаторы URI, Uniform Resource Identifier) таблицы стилей:
Теперь при помощи процессора
(processor) XSLT можно применить таблицу planets.xsl к planets.xml и создать новый документ, planets.html . Процессор XSLT создает новый файл planets.html , который вы можете увидеть на рис. 1.2. Рис. 1.2.
HTML-документ, созданный процессором XSLT Как можно видеть на рис. 1.2, процессор XSLT считывает данные из planets.xml , применяет к ним правила из planets.xsl и создает HTML-таблицу в planets.html. Это наш первый пример XSLT-преобразования. Что здесь на самом деле происходит? У нас были XML-документ, planets.xml , и таблица стилей XSLT, planets.xsl . Но каким образом они объединились для создания planets.html ? XSL = XSLT + XSL-FO
Сам XSLT в действительности является частью более крупной спецификации - расширенного языка таблиц стилей, Extensible Stylesheet Language, или XSL. XSL предназначен для задания точного, до миллиметра, формата документов. Форматирующая часть XSL, представляющая гораздо более Преобразования XSLT-XSL
XSLT позволяет работать непосредственно с содержимым документов XML. Например, у вас может быть огромный документ XML, содержащий всю бейсбольную статистику за последний сезон, однако вас может интересовать только статистика для питчеров. Чтобы извлечь Версии XSLT
Спецификации XSLT разрабатывались значительно активнее, чем спецификации для всего XSL. Рекомендация XSLT 1.0 была окончательно принята 16 ноября 1999 г., и эта версия является сегодня основной версией XSLT.Затем появился рабочий проект XSLT 1.1 и, хотя первоначально он Что нужно для XSLT-преобразования
Для осуществления XSLT-преобразования, такого как преобразование planets.xml в planets.html, необходим XSLT-процессор. Для преобразований документов XML можно использовать XSLT тремя способами: используя отдельные программы, называемые процессорами XSLT. XSLT-преобразования на web-серверах
Можно осуществлять XSLT-преобразования на web-сервере - так чтобы XML-документ был преобразован до того, как web-сервер отправит его браузеру. Здесь самое распространенное преобразование - это преобразование документа XML в HTML, но Ресурсы XSLT
В Интернете можно найти огромное количество нужных нам сведений. Имейте в виду, что все приведенные далее адреса URL легко могут измениться; списки будут актуальны столь долго, сколько этого будут хотеть люди, занимающиеся поддержкой перечисленных Утилиты XSLT
В Интернете существует также много утилит XSLT - в следующем списке перечислены наиболее известные: Microsoft XSL API Extension, http://msdn.microsoft.com/downloads/webtechnology/xml/xslisapi.asp. Упрощает задачу выполнения XSLT-преобразований на стороне сервера; Microsoft XSL-to-XSLT Converter, Инструкции XSLT
В теле шаблона может присутствовать ряд элементов XSLT, называемых инструкциями: Расширяемость XSLT
Несмотря на кажущуюся сложность XSLT, он во многих отношениях ограничен по сравнению с языками программирования, и в процессорах XSLT сразу же начали появляться расширения XSLT. Например, Saxon представил элемент Отличия XSLT 1.1 от XSLT 1.0
Отсутствие result tree fragment
Главное и наиболее существенное отличие XSLT 1.1 от XSLT 1.0 состоит в том, что тип данных, известный в XSLT 1.0 как result tree fragment (результирующий фрагмент дерева) в XSLT 1.1. отсутствует. Вместо него в версии 1.1 используется множество узлов, Отличия XSLT 2.0 от XSLT 1.1
Прежде чем приступить к описанию отличий второй версии XSLT от версии 1.1 (и, соответственно, 1.0), следует сделать одно существенное замечание. Лицензионные соглашения Консорциума W3 не позволяют раскрывать широкой общественности внутренние материалы Данный раздел не претендует на роль документации по языку, а лишь кратко, по шагам объясняет, как создать свой XSLT-шаблон. Описанная ниже схема успешно мною используется уже более 3 лет. По началу я к XSLT
относился с большой опаской (особенно, когда разбирал чужие исходники), однако однажды поняв, что к чему, уже не представляю, как без него можно работать. К XHTML-макету
никаких ограничений нет. Есть лишь определенные рекомендации по верстке, которые позволят значительно сэкономить время на формирование шаблона. В качестве парсера (сборщика) конечного документа можно использовать браузер. Нужно лишь указать в XML-документы
путь к файлу шаблону: Хотя, как показала практика, этот механизм довольно глючный (мне пришлось пользовать IE
). Лучше воспользоваться средствами XML-парсинга
языка, на котором написана CMS-система. Я использую Parser (на нем, вообщем-то, у меня вся система и работает). Я использую следующую схему:
Обозначенный выше пример схемы не претендует на свою оптимальность. В силу тех или иных причин, мне он удобен. Но, обо всем по порядку.
- заголовок XML-файла
. Должен идти строго с начала файла. В нем прописана версия используемого XML-языка и кодировка документа. Я как правило работаю в windows-1251
(пока так удобнее), но, по идее UTF-8
лучше. Корневой элемент документа (можно придумать свое имя). Атрибуты: CMS при сборке страницы просто выводит в все модули, которые задействованы на странице в виде:
Его можно вставить прямо в XML-документ
. Сразу после . Рассмотрим по шагам процесс создания шаблона. Проверив валидность XHML-страницы своего шаблона, для облегчения собственной работы, обозначьте в нем положение всех динамических блоков: Всякие новости Где: Шаблоны можно условно разделить на три вида: В простейшем варианте можно создать каталог xsl
и там все складировать.
Где: Копируем весь XHTML-код внутрь блока Этот шаблон будет автоматически применяться ко всему XML-документу
. В нашем случае, XSL-преобразование
заменит весь XML-код
на XHTML-код
вашего шаблона. Далее, необходимо в директории XSL
создать файл template.xsl
(где, template
- название вашего шаблона), в котором размещаем следующий код:
Где: Следующий шаг - создание шаблона для меню. Меню навигации сайта строиться на основе его структуры, представленной в XML-документе
в следующем виде:
Текущий раздел определяется по двум параметрам:
Где: mode="global_menu"
- используем шаблон с режимом global_menu
. Это нам нужно на тот случай, если нужно будет выводить еще и сервисное меню, отдельно, или "хлебные крошки", или что-еще другое на основе одной и той же ветки навигации.
Где:
Где: Мы вынесли обработку элементов item
(пунктов меню) в отдельный шаблон. При этом, в нем мы добавили еще и вызов другого шаблона: Этот шаблон будет формировать нормальные uri-ссылки
для элементов нашего меню. О нем немного позже.
Здесь мы сталкиваемся с новой конструкцией:
…которая, собственно, и задает условную обработку XML-элементов
. В качестве параметра мы задаем условие: В нашем случае это условие равенства атрибутов ID
у корневого элемента (document
) и текущего элемента (item
), которое и определяет, является ли элемент текущим. Внутри блока
Здесь мы сталкиваемся с инструкцией xsl:attribute
. Она позволяет создавать атрибуты для элементов внутри которого она вызывается. В нашем случае мы вызываем ее из элемента a
, соответственно, она создаст для него атрибут href
, т.е. адрес. Инструкция Рассмотрим типичный пример рендеринга HTML. Дан список музыкальных композиций в виде XML-документа.
Отобразим данный документ в виде HTML ul/li списка, как это показано ниже: Для этого используем следующее XSLT-преобразование:
]>
Данное преобразование вернёт нам следующий HTML:
XSLT-преобразование состоит из трёх шаблонов ( xsl:template). Каждый шаблон обслуживает свою сущность, что даёт нам возможность легко вносить изменения и делает код понятным. Если нам надо поменять отображение списка (например, добавить атрибут class), то мы редактируем шаблон match="PlayList" . Если же мы хотим изменить отображение элементов списка, то тут, совершенно очевидно, что стоить менять шаблон match="Track" . Фактически, XSLT не только даёт нам возможность разделить данные и представление (это задача любого шаблонизатора), но и позволяет разделять представления различных сущностей. Конечно, в более сложных случаях разделения добиться такого разделения бывает сложно. Очень легко прийти к ситуации, когда возникает «божественный шаблон», который делает всё, так же стоит бояться скатиться к «стрельбе дробью» кучей мелких шаблонов. Что мне очень нравится в XSLT, так это возможность отладки. Отладка помогает наглядно увидеть логику работы XSTL, структуру документа, значения переменных. Например, отладка поможет увидеть, что за сущность обрабатывает шаблон match="/" . В Visual Studio отладка XSLT запускается сочетанием клавиш ALT+F5 . Добавив в окно Watch XPath выражение " . " (точка), мы увидим, что текущий элемент шаблона - это корень (Root) документа. Здесь можно разместить контейнер div , или что-то относящееся ко всему XML-документу. Можно заметить, что в приведенных примерах присутствует сущность — Мы можем ее использовать, потому что определили ее в начале XSLT-документа
]>
Таким образом, — выводится, как символ с кодом — . Если нужно вывести строку «как есть», то стоит использовать CDATA следующим образом:
Хочу заострить внимание на элементе xsl:text . Он позволяет контролировать, что именно будет содержать TEXT-элемент. Значимость xsl:text очевидна на практике: XSLT-шаблон:
Полученный HTML:
Как видно из примера выше, отсутствие элемента xsl:text привело к появлению в HTML лишних переводов строк и пробелов. Безусловно, можно писать XSLT и без xsl:text , следующим образом:
Такой шаблон трудночитаем и есть большая вероятность, что при сопровождении в нём будут появлятся ошибки. Нужно стараться, чтобы форматирование XSLT-шаблона не влияло на результат трансформации. Именно поэтому я считаю, что использовать xsl:text - это хорошая практика. Для ветвлений в XSLT есть специальные элементы: xsl:if и xsl:choose . Но я считаю, что этими инструментами сильно злоупотребляют. Более интересен приём, позволяющий не загромождать шаблон ветвлениями. Рассмотрим пример реализации ветвлений: Дополним предыдущий пример возможностью выводить сообщение «Список пуст» в случае, если PlayList не содержит элементов Track . Решение с использованием xsl:choose будет таким:
]>
Решение с использованием дополнительного шаблона будет следующим:
]>
Второе решение, на мой взгляд, выглядит красивее: новая функциональность не добавила нового кода в старые шаблоны, новый шаблон максимально изолирован. Если понадобится добавить картинку к сообщению о пустом списке, то в первом случае скорее всего разбухнет элемент xsl:when в шаблоне match="PlayList" . А вот во втором случае изменения будут только в специализированном шаблоне. В предыдущем примере мы разделили две абсолютно разные ветки рендеринга элемента списка. Но что если ветки различаются незначительно? Здесь использование xsl:if и xsl:choose вполне оправдано. Но мне бы хотелось показать другой подход: использование параметра mode у элемента xsl:template . В следующем примере навесим разные стили на чётные и нечётные элементы списка.
]>
Для циклов в XSLT есть элемент xsl:for-each , но схожий эффект можно получить, используя обычный xsl:apply-templates . Выведем список композиций, отсортированный по длительности.
]>
]>
Как видно из кода, первый вариант короче и проще, но он нарушил принцип разделения ответственности для шаблонов. Теперь шаблон match="PlayList" стал содержать логику отображения элемента Track . Казалось бы, ничего страшного, но представим задачу, когда в списке встречаются композиции с Id и без. Для композиции с Id нужно отрендерить ссылку, а для остальных вывести только текст. Вариант с использованием xsl:for-each:
]>
Вариант с использованием xsl:apply-templates:
]>
В случае xsl:for-each нам потребовалось добавлять ветвление, а в случае xsl:apply-templates - новый шаблон. Если бы шаблон match="PlayList" уже содержал ветвления и логику, то нам понадобилось некоторое время, чтобы разобраться, куда именно нам нужно вставить ветку. Вариант с xsl:apply-templates лишён этого недостатка, поскольку мы лишь декларируем новый шаблон, а не пытаемся внедриться в старые. Использование xsl:for-each имеет ещё одну большую опасность. Если вы видите произвольный участок кода внутри шаблона match="PlayList" , то предполагаете, что текущий элемент это PlayList , однако xsl:for-each меняет контекст. Увидев следующий код код:
Вам потребуется внимательно присмотреться к контексту, чтобы понять, что select="." на самом деле выбирает текущий Track . Шаблон mode="TrackName" match="Track" был добавлен для избежания дублирования кода, отображаюшего название. Я не сделал этого раньше, потому что в этом не было необходимости. Как только я заметил дублирование, я провёл рефакторинг и вынес общую логику отображения в новый шаблон. xsl:for-each - это способ не плодить сущности. Вы просто добавляете логику отображения внутрь xsl:for-each и всё прекрасно работает. Проблемы начинаются потом, когда тело цикла разрастается, а проводить рефакторинг xsl:for-each намного сложнее, чем выносить дублированный код. XSLT - это достаточно гибкий инструмент, он даёт возможность решить вашу задачу разными путями. Однако, при написании XSLT стоит уделять особое внимание сопровождаемости шаблонов. Надеюсь мои практические советы помогут вам писать более понятный код.
Аннотация:
Рассматривается генерация кода преобразованиями XSLT. Изучается синтаксис XSLT, особенности применения преобразований, а также выполнение таких операций, как фильтрация, сортировка, выборка по условию в шаблонах. Выполнение трансформации программным путем в C#. Преимущества и недостатки технологии.
Во второй лекции мы уже рассматривали пример с использованием XSLT
. В этой лекции мы рассмотрим эту технологию более подробно. XSL (eXtensible Stylesheet Language)
переводится как Расширяемый Язык Стилей, и представляет собой язык для создания стилей XML
документов. XSLT(XSL Transformations)
- это язык преобразований XSL
и является его частью. Стиль XSLT
предназначен для преобразования иерархической структуры и формата документа XML
. Результатами преобразования могут стать XML
- файл
, текстовый файл
, программный код, HTML
- файл
, файл
в формате PDF
, и так далее. Этот язык предоставляет мощные возможности для манипуляции данными, информацией, текстом в иерархическом виде. А это как раз то, что нужно для генерации кода. Применение XSLT
может существенно помочь в генерации кода. Кроме того, он предоставляет удобную альтернативу технологии шаблонов Т4. XSLT
был разработан консорциумом W3C (World Wide Web Consortium)
. Первая версия языка XSLT
1.0 стала рекомендацией 16 ноября 1999 года, а версия XSLT
2.0 стала рекомендацией 23 января 2007 года. Обе версии используются достаточно активно, и в этой лекции мы рассмотрим ту базовую функциональность, которая является для них общей. А это значит, что рассматривать будем в основном первую версию. Также упомянем некоторые команды из второй версии. Модель XSLT
включает в себя такие части как: Документы XML
являются входными данными, которые нужно преобразовать в другие документы. Документ стиля XSLT
является корректным (well formed) документом XML
и содержит набор правил для выполнения преобразования. Иными словами, документ стиля является шаблоном. Процессор XSLT
является приложением, которое принимает в качестве входных данных документы XML
и стили XSLT
. Он выполняет трансформацию, то есть применение набора правил в стилях XSLT
к документам XML
. Результатом этой работы являются выходные документы
. Процессоры XSLT
имеют множество реализаций и встроены во многие браузеры вроде Internet
Explorer, Firefox, Mozilla, Opera и другие. В Internet
Explorer используется инструмент MSXML, разработанный Microsoft. XSLT
- процессор
встроен в Internet
Explorer, начиная с версии 4.5. Сгенерированный результат примеров данной лекции можно просматривать путем открытия XML
-файлов в одном из браузеров. В конце лекции мы рассмотрим возможности запуска трансформации программным путем, используя соответствующие классы языка программирования. Другой частью технологии XSL
является язык XPath
, предназначенный для доступа к узлам документа XML
путем задания путей и выражений. Язык Xpath
используется в файлах стилей для навигации внутри XML
-документов, определения частей исходного XML
-документа, которые совпадают с одним или более заранее заданными шаблонами. При нахождении совпадения процессор
XSLT
применит к нему соответствующие правила из файла стиля и преобразует его в часть результирующего документа. В файлах стилей XSLT
выражения XPath
используются весьма интенсивно. Язык XSLT
состоит из множества
инструкций, записанных в виде тегов. Имя каждой инструкции обычно начинается с символов xsl
. Для выполнения трансформации документ стиля XSLT
должен являться корректным документом XML
. Для преобразования документа XML
необходимо добавить в начало документа инструкцию, подобную следующей: XSL
- файл
стилей обычно содержит множество элементов, самым главным из которых является элемент xsl
:stylesheet
. Именно он указывает, что данный XML
- файл
является файлом стилей. Кроме него могут содержаться другие элементы, например xsl
:template
, xsl
:value-of
. Документ XML
и файл
стиля передается в XSLT
- процессор
, который обрабатывает данные файлы, выполняет преобразование и выводит результат трансформации. Ниже представлен документ XML
, содержащий список
языков программирования.
Необходимо вывести этот список
в формате HTML
. Для этой цели используем инструкцию xsl
:for-each
, которая будет применять часть шаблона к секциям документа, наименование которых указано в атрибуте select
. В нашем случае укажем select="languages/language"
. Файл
стилей будет применяться следующий: Шаблон
внутри xsl
:for-each
выводит содержимое каждого элемента language
из languages
. Для этой цели используется инструкция
xsl
:value-of
и задаваемый атрибут
select="."
. Это означает, что процессор
должен выбирать текст содержимого текущего элемента в документе. Кроме отражения содержимого можно задавать имена конкретных тегов, а также атрибутов для выборки значений, хранящихся в них. Примеры будут рассмотрены далее. Откроем XML
файл
через Internet
Explorer или другой браузер
. Будет выведен такой текст: Мои любимые языки:
Одним из самых главных элементов в стиле является xsl
:template
. Служит для определения повторно используемого шаблона и содержит правила, по которым будет преобразован документ XML
. В атрибуте match
содержится выражение
для отбора узлов, к которым будет применен шаблон
. Также может присутствовать атрибут
name
. В этом случае есть возможность вызывать шаблон
по имени инструкцией xsl
:apply-templates
. Для повторения вывода шаблона для каждого элемента документа применяется инструкция
xsl
:for-each
. Шаблон
выполняется для каждого элемента, соответствующего условию, указанному в атрибуте select
. Инструкция
xsl
:value-of
служит для вычисления выражения, записанного в атрибуте select
с последующим выводом результата в том месте, где расположен сам элемент. Мы рассмотрели случай, когда считываются значения каждого узла. Однако часто возникает необходимость выбирать только часть данных, то есть их надо фильтровать. Шаблоны XSLT
поддерживают два способа фильтрации. Один из них - это применение атрибута select
инструкции xsl
:for-each
, а второй - применение атрибута match
элемента xsl
:template
. Применение match
мы рассмотрим позже, а сейчас рассмотрим select
. Изменим немного файл
с данными: добавим атрибут
high
, обозначающий, является ли язык из нашего списка языком высокого уровня. Также расширим сам список
языков.
Заметим, что значение
false
для атрибута high
стоит только для значения "Assembler"
. Изменим немного файл
таблицы стилей: В секции [@ high
="true"]
мы указываем, что выбирать следует только те узлы документа, у которых атрибут
high
имеет значение
"true"
. Знак @
является символом, указывающим на то, что после него стоит имя атрибута. Посмотрим на результат: Языки высокого уровня:
Как видим, значение
"Assembler"
не отображается в списке языков, то есть процессор
XSLT
отфильтровал данные согласно заданным условиям. Кроме фильтрации другой часто применяемой операцией при генерации кода является сортировка
. Атрибут
order-by
инструкции xsl
:for-each
служит для сортировки результата, для обозначения порядка прохода узлов документа при выполнении трансформации. Сортируемые поля перечисляются через точку с запятой, а также имеют перед своим названием знаки "+"
или "-"
, означающие сортировку по возрастанию или убыванию. Рассмотрим немного измененный вариант документа - вместо атрибута high
будем использовать элемент level
, принимающий значения high
или low
. А имя языка запишем в элемент name
.
В следующей таблице стилей для инструкции xsl
:for-each
применим атрибут
order-by
со значением +name
, где знак плюса означает, что надо отсортировать по возрастанию. В атрибуте select
мы фильтруем по значению элемента level
. Также в атрибуте select
инструкции Name Mass Radius Day Рабочий стол
Определим, что нам нужно для работы:
У меня входной XML
документ выдает CMS-система, в которой каждая страница с материалом собирается в XML-дерево
.
Входной XML-документ
Для начала разберемся со входным XML-документом
. Для того, чтобы использовать XSL
нужно иметь полное представление о его структуре.
/>
Начало
/
Новости
news
- блок элементов навигации:
- блок основной навигации (основная структура сайта):
- блок содержимого.
В моей CMS используется модульная структура: все наполнение сайта представляет собой модули двух видов:
В XSL-шаблонах
есть разметка блоков, в которые можно размещать модули. Для определения блоков я использую простую нумерацию.
Атрибуты:
Container
- блок-назначение (в каком блоке шаблона выводиться).
Sorting
- порядок вывода в блоке.
Type
- тип:
Method
- обработчик данных.
Html
- текстовый модуль.
Title
- название модуля.
DTD
я практически не использую (лишь в самом общем виде):
]>Подготовка XHML-шаблона
XSL-шаблон создается на базе XHTML-шаблона (некой типовой страницы сайта). Код XHTML-страницы, при этом, должен быть валидным
.
Сделать это лучше всего с помощью обычных HTML-комментариев:
...
Администрирование сайта Основы описания XSL-шаблонов
Все файлы XSL-шаблонов имеют следующий вид:
данные шаблона
Если элементы одного вида могут встречаться в различных частях структуры XML-документа
(например, в XML-документе, формируемом системой элемент item используется повсеместно и имеет разное значение), то в шаблоне можно указать "структурный адрес" такого элемента:
При этом, порядок применения шаблонов иерархичный, т.е., сначала шаблон применяется к корневому элементу, а затем, к дочерним, т.е. если мы вызвали обработчик для navigation
, то для вызова обработчика для navigation/sections/item
нам достаточно указать адрес sections/item
.Структура папок шаблонов
Для того, чтобы хранить на одном сайте несколько модулей необходимо как-то продумать структуру их хранения в папкам. При этом, удобнее разбить шаблоны на модули по нескольким xsl-файлам
. Такой подход позволит в дальнейшем повторно их использовать при создании новых шаблонов.
Нам для начала потребуется создать каталог xsl/my_template
и в нем, файл layout.xsl
следующего вида:
Директива импорта внешнего XSL-файла (обрабатываеться XSL-процессором
) из указанного файла. Путь к файлу указываем относительный.Создание шаблона для основного навигационного меню
Наш предыдущий шаблон не обладает никакой динамикой, т.к. просто заменяет весь выходной XML-документ на код нашего шаблона.
Начало
/
Новости
news
Соответственно, для того, чтобы вывести меню сайта необходимо создать шаблон для элементов:
При этом, необходимо учесть, что элементы item
могут содержать другие элементы item
, в том случае, если у раздела есть подразделы:1. Создаем в директории xsl/my_template файл navigation.xsl следующего вида:
2. Вставляем в шаблон код нашего меню из файла layout.xsl
:
3. …а на его место в файле layout.xsl
вставляем вызов нашего шаблона меню:
select="navigation/sections"
- относительный (относительно текущего) путь-адрес элемента. При этом, будут обработаны все элементы navigation/sections
.4. Плюс, добавим в файл layout.xsl директиву импорта файла шаблона navigation.xsl
:
5. Далее, создаем в файле navigation.xsl
еще один шаблон, для обработки пунктов меню:
6. Немного изменяем шаблон sections
:
7. Теперь нам необходимо доделать меню,
чтобы оно учитывало, какой раздел является текущим. Для этого нам придется добавить условную обработку в наш шаблон элемента item
:
8. Теперь, разберем шаблон href_attribute
:
Отладка XSLT
Работа с сущностями XML
Элемент xsl:text
Ветвления
Циклы и сортировка в XSLT
Заключение
Язык преобразований XSLT
Как работает XSLT
XPath
Применение XSLT
Мои любимые языки:
Фильтрация
Языки высокого уровня:
Сортировка
Языки высокого уровня:
Рекомендуем почитать