Что такоеXSLT? |
Статьи - XSLT | ||||||
Преобразования расширяемого языка таблиц стилей (XSLT) предоставляют способ для автоматического перевода XML-данных из одной формы в другую. Целевая форма -это обычно другой XML-документ, но не обязательно; вы можете преобразовать XML практически во что угодно, просто создав таблицу стилей XSLT и обработав данные. Если вы хотите изменить результаты, вы просто меняете таблицу стилей и обрабатываете XML заново. Здесь есть дополнительное преимущество, расширяющее возможности непрограммистов, например, дизайнеров, которые могут изменять таблицу стилей и влиять на результаты. Давайте посмотрим пример. В данном руководстве мы возьмем XML-документ и преобразуем его в XHTML-документ, который можно отобразить как Web-страницу. Входные данные - это просто файл с рецептами(см. листинг 1).
Замечание редактора: Эти рецепты –приведены просто для примера, так, как их представляет себе автор. Правильный рецепт для Gush'gosh (полученный от его жены, которая и готовит это блюдо) состоит из 1 фунта (0,454 кг) рубленой говядины, 1 фунта рожков, 1/2стакана желтого сахара, 1 небольшого пакета (около 300 грамм) мелко нарезанного лука, 1 чайной ложки сушеного укропа и 1 небольшой банки томатной пасты, в которую добавляется желтый сахар. Конечно, это очень простой пример, поэтому вы не увязнете в деталях самих данных, однако в виде XML-данных можно представить что угодно - от процесса журналирования до финансов. Наша цель -преобразовать эти данные в XHTML-страницу, которая будет отображать рецепты по отдельности и форматировать их ингредиенты и инструкции по приготовлению (см. листинг 2).
Вы можете отобразить этот результат в браузере, как показано на рисунке 1.
Как уже упоминалось, конечной целью может быть любой формат, не только XHTML, и даже необязательно XML. Давайте начнем с простых преобразований. Самая простая таблица стилей - это просто XML документ, включающий XSLT-вывод (см. листинг 3).
Обратите внимание на использование пространства имен xsl. Добавление этого пространства имен говорит процессору, какие элементы связаны с обработкой, а какие должны быть просто выведены. Элементы value-of говорят процессору вставить определенные данные в это место. Какие именно данные вставлять определяется содержимым атрибута select. Атрибут select состоит из выражения XPath. Подробнее XPath будет обсуждаться в разделе Подробнее об XPath, однако здесь вы можете видеть, что доступ к элементам "название", "ингредиенты" и"инструкция по приготовлению" происходит через иерархию документа. Мы начинаем с корневого элемента, /recipes, и от него движемся вниз. Простейший способ выполнить XML-преобразование - это добавить указание на таблицу стилей вXML и отобразить его в браузере (см. листинг 4).
Эта инструкция по обработке говорит браузеру извлечь таблицу стилей, расположенную в basicstylesheet.xsl, и использовать ее для преобразования XML-данных и вывода результатов. Если вы откроете наш XML-документ в браузере Microsoft® Internet Explorer®, то увидите результат, похожий на рисунок 2.
Однако этоне совсем то, что мы хотели получить. Если вы выберете в браузере Вид>Просмотр HTML-кода, то увидите изначальный XML. Чтобы увидеть результат преобразования, необходимо произвести это преобразование и создать выходнойфайл. Это можно сделать через командную строку, используя Java-код со следующейкомандой (см. листинг 5):
Если вы получите исключение ClassNotFoundException, возможно, вам нужно загрузить Apache Xalan (см. "Получить продукты и технологии" в разделе Ресурсы)и добавить включенные в него JAR-файлы в путь к классам. Выполнив преобразование, показанное в листинге 5, вы увидите, что файл result.html содержит следующий код (см. листинг 6).
Я добавил несколько интервалов для удобства чтения, однако здесь следует отметить пару моментов. Во-первых, листинг6 отображает информацию только для одного рецепта. Во-вторых, ингредиенты слеплены вместе без каких-либо пробелов. Это тоже не тот результат, который мы хотели получить. К счастью, можно создать более точные шаблоны для отображения данных именно в той форме, в какой вы хотите. |