- Введение в XSLT
- Книги:-
- Книги:-
- Книги:-
- Книги:-
- Книги:-
- Книги:-
- Книги:-
- Книги:-
- Книги:-
- Список книг Название :-
- Список книг Название :-
- Заключение
В этом учебном пособии объясняется, что такое XSLT, его преобразования, элементы и использование на примере. Также рассматривается важность XPath для разработки кода преобразования XSLT:
Термин "XSLT" образован путем объединения двух слов, т.е. "XSL" и "T", "XSL" - это краткая форма "Extensible Stylesheet Language", а "T" - краткая форма "Transformation".
Итак, по сути, XSLT - это язык преобразования, который используется для трансформации/преобразования исходных XML-документов в XML-документы или в другие форматы, такие как HTML, PDF, с помощью XSL-FO (объектов форматирования) и т.д.
Введение в XSLT
Преобразование происходит с помощью XSLT-процессора (например, Saxon, Xalan). Этот XSLT-процессор принимает один или несколько XML-документов в качестве источника с одним XSLT-файлом, который содержит XSLT-код, записанный в нем, и результат/выходные документы будут сгенерированы позже, как показано на следующей диаграмме.
Процессор XSLT анализирует исходные XML-документы, используя X-Path для навигации по различным элементам источника, начиная с корневого элемента и до конца документа.
Все, что вам нужно знать о X-Path
Преобразование XSLT
Для начала преобразования нам понадобится один XML-документ, на котором будет выполняться XSLT-код, сам файл XSLT-кода и инструмент или программное обеспечение, имеющее XSLT-процессор (В учебных целях можно использовать любую бесплатную или пробную версию программного обеспечения).
#1) XML-код
Ниже приведен исходный XML-код, на котором будет выполняться код XSLT.
Имя файла: Books.xml
XSLT Programmer's Reference Michael Kay Wrox $40 4th Head First Java Kathy Sierra O'reilly $19 1st SQL The Complete Reference James R. Groff McGraw-Hill $45 3rd
#2) Код XSLT
Ниже приведен код XSLT, на основе которого будет выполняться вышеуказанный XML-документ.
Имя файла: Books.xsl
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
#3) Результат / Код вывода
После использования кода XSLT на приведенном выше XML-документе будет получен следующий код.
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
5350192956 | Справочник программиста по XSLT | Майкл Кэй | Wrox | $40 | 4-й |
3741122298 | Head First Java | Кэти Сьерра | О'Райли | $19 | 1-й |
9987436700 | SQL The Complete Reference | Джеймс Р. Грофф | McGraw-Hill | $45 | 3-й |
#4) Просмотр результата / вывода в веб-браузере
Книги:
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
5350192956 | Справочник программиста по XSLT | Майкл Кэй | Wrox | $40 | 4-й |
3741122298 | Head First Java | Кэти Сьерра | О'Райли | $19 | 1-й |
9987436700 | SQL The Complete Reference | Джеймс Р. Грофф | McGraw-Hill | $45 | 3-й |
Элементы XSLT
Чтобы понять приведенный выше код XSLT и его работу, нам сначала нужно понять различные элементы XSLT и их атрибуты.
#1) ИЛИ
Каждый код XSLT должен начинаться с корневого элемента либо или
Атрибуты:
- @xmlns:xsl: Соединяет документ XSLT со стандартом XSLT.
- @version: Определяет версию кода XSLT для синтаксического анализатора.
#2)
Это объявление определяет набор правил, применяемых для обработки или преобразования выбранного входного элемента исходного документа в определенные правила целевых элементов выходных документов.
В основном, существует два типа шаблонов в зависимости от их атрибутов:
(i) Именованный шаблон: Когда элемент xsl: template содержит атрибут @name, это называется именованным шаблоном.
Именованные шаблоны вызываются элементом xsl:call-template.
(ii) Шаблон для подбора: Элемент xsl:template содержит атрибут @match, который содержит шаблон соответствия или XPath, применяемый на входных узлах.
Шаблоны соответствия вызываются элементом xsl:apply-template.
Элемент xsl:template должен иметь либо атрибут @match, либо атрибут @name, либо оба атрибута. Элемент xsl:template, не имеющий атрибута match, не должен иметь атрибута mode и атрибута priority.
Давайте перепишем приведенный выше XSLT(
a) Код XSLT на основе шаблона Match Template с . Смотрите ниже желтый & серый выделенный измененный код, он даст тот же результат, что и выше.
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|
Выделенная область показана на скриншоте:
b) Код XSLT на основе именованного шаблона с . См. ниже желтый & серый выделенный измененный код, он даст тот же результат, что и выше.
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|
Выделенная область показана на скриншоте:
#3)
Процессор найдет и применит все шаблоны, у которых XPath определен в атрибуте @select.
Атрибут @mode также используется, если мы хотим предоставить более одного способа вывода с одним и тем же входным содержимым.
#4)
Процессор выполнит вызов шаблонов, имеющих значение внутри атрибута @name (required).
элемент используется для передачи параметров в шаблон.
#5)
Предоставьте строковое/текстовое значение относительно выражения XPath, определенного в атрибуте @select, как определено в приведенном выше коде.
Это даст значение названия книги.
#6) : Повторение
Это позволит обработать инструкции для каждого набора узлов (xpath определен в атрибуте @select (required)) в отсортированной последовательности.
Приведенный выше код означает для каждого узла набор средств магазин/книга:
/store/book[1]
/store/book[2]
/store/book[3]
можно также использовать в качестве дочернего элемента xsl:for-each для определения порядка сортировки.
#7) : Условная обработка
Инструкция xsl:if будет обрабатываться только в том случае, если булево значение атрибута @test будет истинным, иначе инструкция не будет оценена и будет возвращена пустая последовательность.
2"> Условие True: количество книг больше двух.
Результат: Условие True: количество книг больше двух.
Здесь count() является предопределенной функцией.
#8) : Обработка альтернативных условий
xsl:choose имеет несколько причин для различных условий, которые проверяются внутри атрибута @test элементов xsl:when, условие проверки, которое становится истинным первым среди всех xsl:when, будет обработано первым, и есть необязательный элемент xls:otherwise, так что если ни один из тестов условий не становится истинным, то этот xsl:otherwise будет рассмотрен.
Условие верно: количество книг равно единице. Условие верно: количество книг равно двум. Условие верно: количество книг равно трем. Ни одно условие не совпадает.
Результат: Условие истинно: количество книг равно трем.
#9)
xsl:copy работает с контекстным элементом, т.е. если это узел, то он скопирует контекстный узел во вновь созданный узел, но не скопирует дочерние элементы контекстного узла. По этой причине такой метод называется неглубоким копированием. В отличие от элемента xsl:copy-of, xsl:copy не имеет атрибута@select.
В приведенном ниже коде элементы контекста копируются в вывод & все дочерние элементы называются & копируются xsl:apply-template рекурсивно.
node() Обозначает все узлы и все их атрибуты рекурсивно.
Результат: При этом все узлы и атрибуты исходного документа будут рекурсивно скопированы в выходной документ, т.е. будет создана точная копия исходного документа.
#10)
xsl:copy-of по умолчанию будет рекурсивно копировать последовательность узлов со всеми их дочерними элементами и атрибутами, из-за этой природы это также называется глубоким копированием. Атрибут @select необходим для оценки XPath.
Результат: При этом все узлы и атрибуты исходного документа будут рекурсивно скопированы в выходной документ, т.е. будет создана точная копия исходного документа.
Обозначает копию текущего узла и текущего атрибута.
#11)
Этот элемент используется для записи комментария к целевому результату, любое текстовое содержимое, которое находится на стороне этого тега, будет выведено в виде комментированного вывода.
Это будет выведено в вывод как узел комментария.
Результат:
#12)
Это создаст текстовый узел в результирующем документе, значение внутри xsl:text будет выведено в виде строки.
Это
текстовая строка.
Выход:
Это
текстовая строка.
#13)
Это создаст элемент в результирующем документе с именем, указанным в его атрибуте @name. Атрибут name является обязательным атрибутом.
Результат: 5350192956
#14)
Это создаст атрибут для его родительского элемента в документе результата. Имя атрибута определяется атрибутом name, а значение атрибута вычисляется по XPath, указанному в атрибуте select, как показано в приведенном ниже коде. Атрибут name является обязательным атрибутом.
Результат:
#15)
Этот элемент сортирует выбранный узел в последовательности по возрастанию или убыванию. Узел или XPath задается атрибутом @select, а направление сортировки определяется атрибутом @order.
В приведенном ниже коде мы получим список всех книг в соответствии с названием книги в алфавитном порядке.
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
Выделенная область показана на этом снимке экрана:
Результат: В приведенном ниже списке названия книг расположены в алфавитном порядке, то есть в порядке возрастания.
Книги:
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
3741122298 | Head First Java | Кэти Сьерра | О'Райли | $19 | 1-й |
9987436700 | SQL The Complete Reference | Джеймс Р. Грофф | McGraw-Hill | $45 | 3-й |
5350192956 | Справочник программиста по XSLT | Майкл Кэй | Wrox | $40 | 4-й |
#16)
Этот элемент объявляет переменную, которая содержит значение. Переменная может быть глобальной или локальной. Имя переменной определяется атрибутом @name, а значение, которое будет содержать эта переменная, определяется атрибутом @select.
Доступ к глобальной переменной является глобальным, т.е. переменные могут быть вызваны в любом элементе и оставаться доступными в пределах таблицы стилей.
Чтобы определить глобальную переменную, нам просто нужно объявить ее рядом с корневым элементом таблицы стилей, как показано в приведенном ниже коде, выделенном желтым цветом, переменная 'SecondBook' является глобальной переменной и содержит название второй книги.
Доступ к локальной переменной является локальным для элемента, в котором она определена, т.е. эта переменная не будет доступна за пределами элемента, в котором она определена, как показано в приведенном ниже коде, выделенном серым цветом, переменная 'first book' является локальной переменной и содержит название первой книги.
Для вызова глобальной или локальной переменной перед именем переменной используется символ доллара ($), как показано ниже, выделенный желтым цветом. $ .
Название первой книги: Название второй книги:
Выделенная область показана на скриншоте:
Результат:
Название первой книги: XSLT Programmer's Reference
Название второй книги: Head First Java
#17)
Этот элемент используется для объявления ключей, для сопоставления значений шаблона с этим конкретным ключом.
Name - это поставщик для этого ключа по атрибуту @name(" get-publisher "), который в дальнейшем используется внутри функции key(). Атрибут @match предназначен для индексации входного узла выражениями XPath(" книга "), как в приведенном ниже выделенном желтым цветом @match, используется для индексации всех книг, имеющихся в магазине.
По отношению к атрибуту @match используется атрибут @use, который объявляет узел для получения значения для этого ключа через выражение XPath("publisher").
Теперь, предположим, если нам нужна информация о книге, которая опубликована только издательством 'Wrox', то мы можем легко получить это значение через элемент xsl:key, создав пару ключ-значение.
key('get-publisher', 'Wrox') Key() принимает два параметра, первый - имя ключа, в данном случае это 'get-publisher', второй - строковое значение, которое нужно найти, в нашем случае это 'Wrox'.
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
Выделенная область показана на скриншоте:
Результат:
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
5350192956 | Справочник программиста по XSLT | Майкл Кэй | Wrox | $40 | 4-й |
Результат / Просмотр HTML:
Книги:
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
5350192956 | Справочник программиста по XSLT | Майкл Кэй | Wrox | $40 | 4-й |
#18)
Этот элемент используется в целях отладки при разработке XSLT. Элемент выдает свой вывод на стандартный экран вывода приложения.
Атрибут @terminate используется с двумя значениями либо 'yes', либо 'no', если значение установлено в 'yes', то парсер немедленно завершает работу, как только условие теста будет выполнено, чтобы сообщение было выполнено.
Чтобы понять это, предположим, что если в нашем входном документе элемент price случайно окажется пустым, как в приведенном ниже коде, то обработка должна немедленно остановиться, как только процессор встретит пустой элемент price, чего можно легко добиться, используя xsl:message внутри условия проверки if, как в приведенном ниже XSLT-коде.
Предупреждение отладчика отображается на стандартном экране приложения: Обработка завершена xsl:message на строке 21.
Ввод XML-кода:
SQL The Complete Reference Джеймс Р. Грофф McGraw-Hill 3rd
См. скриншот для выделенной области:
Код XSLT:
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
Выделенная область показана на скриншоте:
Результат: Обратите внимание, что как только синтаксический анализатор встречает пустой тег price, он немедленно прекращает обработку, из-за чего закрывающие теги , и не попадают в конец файла.
Книги:-
Идентификатор книги | Название книги | Имя автора | Издатель | Цена | Издание |
---|---|---|---|---|---|
5350192956 | Справочник программиста по XSLT | Майкл Кэй | Wrox | $40 | 4-й |
3741122298 | Head First Java | Кэти Сьерра | О'Райли | $19 | 1-й |
См. скриншот для выделенной области:
#19) &
элемент определяет параметр шаблона, если он определен внутри. Он может быть определен либо внутри как глобальный параметр, либо внутри как локальный параметр этого шаблона.
Значение the передается/подставляется при вызове шаблона по адресу или .
передается значение параметра, определенного внутри Атрибут типа @name содержит имя параметра, которое должно соответствовать атрибуту @name элемента. Атрибут @Select используется для установки значения параметра.
Для получения значения параметра, как и переменной, используется знак доллара ($).
Исходный XML-код:
XSLT Programmer's Reference Michael Kay Wrox $40 4th Head First Java Kathy Sierra O'reilly $19 1st SQL The Complete Reference James R. Groff McGraw-Hill $45 3rd
Код XSLT:
Список книг Название :-
Название книги:
Выделенная область показана на скриншоте:
Вывод результатов:
Список книг Название :-
Название книги: Справочник программиста по XSLT
Название книги: Head First Java
Название книги: SQL The Complete Reference
#20)
используется для импорта другого модуля таблицы стилей внутрь нашей текущей таблицы стилей. Это помогает достичь модульного подхода к разработке XSLT.
После импорта все шаблоны становятся доступными для использования. Приоритет шаблонов, определенных в родительской таблице стилей (которая импортирует другую таблицу стилей), выше, чем в импортированной таблице стилей (которая импортируется родительской таблицей стилей).
Если другая таблица стилей также имеет такое же имя шаблона, как определено в шаблоне, который импортируется, то чужие шаблоны переопределяются вашим собственным шаблоном.
Атрибут @href используется в качестве URI таблицы стилей, которую вы хотите импортировать.
#21)
Как и вышеупомянутый xsl:import, также помогает в достижении модульного подхода к разработке XSLT. Все включенные шаблоны имеют тот же приоритет/приоритет, что и вызывающая таблица стилей. Это как если бы вы скопировали все шаблоны из другой таблицы стилей в свою собственную таблицу стилей.
Атрибут @href используется в качестве URI таблицы стилей, которую вы хотите импортировать.
#22)
Этот элемент используется для указания дерева результатов в выходном файле. Он содержит атрибуты типа @method, которые могут иметь значения 'XML', 'HTML', 'XHTML' и 'text', по умолчанию 'XML'.
@encoding задает кодировку символов, которая будет в выходном файле, как показано в примере ниже encoding="UTF-16″, значения по умолчанию для XML или XHTML могут быть UTF-8 или UTF-16. @indent задает отступ выходного кода XML или HTML, для XML значение по умолчанию "нет", а для HTML и XHTML значение по умолчанию "да".
#23)
Этот элемент используется для удаления несущественных пробелов для перечисленных элементов источника внутри атрибута @element, а если мы хотим удалить пробелы из всех элементов, то мы можем использовать '*' внутри атрибута @elements.
#24)
Этот элемент используется для сохранения пробелов для перечисленных элементов источника внутри атрибута @element, и если мы хотим сохранить пробелы для всех элементов, то мы можем использовать '*' внутри атрибута @elements.
Заключение
Таким образом, в этой статье мы узнали о XSLT, часто используемых элементах XSLT, их использовании на примере исходного и целевого/результатного кода, преобразовании или трансформации исходного элемента в целевой элемент.
Мы также обсудили важность XPath для разработки кода преобразования XSLT. Мы рассмотрели объявление шаблона XSL и вызов шаблона & передачу параметров. Мы научились объявлять глобальные и локальные переменные, их использование в коде XSLT и как их вызывать.
Мы узнали о различных ветвящихся или условных элементах XSLT, таких как xsl:if, xsl:for-each, xsl:choose. Мы поняли разницу между поверхностным и глубоким копированием, сортировкой узлов, отладкой кода XSLT с помощью xsl:message, разницу между именованными шаблонами и шаблонами соответствия, а также форматирование вывода с помощью xsl:output.
Об авторе : Химаншу П. - опытный профессионал в области информационных технологий. Он работал в ITC MNCs в различных сферах бизнеса и на различных технологиях. Любимое занятие Химаншу - чтение журналов и ведение блога.