Главная / XSLT / Что такоеXSLT?
Что такоеXSLT? PDF Печать E-mail
Статьи - XSLT

Преобразования расширяемого языка таблиц стилей (XSLT) предоставляют способ для автоматического перевода XML-данных из одной формы в другую. Целевая форма -это обычно другой XML-документ, но не обязательно; вы можете преобразовать XML практически во что угодно, просто создав таблицу стилей XSLT и обработав данные. Если вы хотите изменить результаты, вы просто меняете таблицу стилей и обрабатываете XML заново. Здесь есть дополнительное преимущество, расширяющее возможности непрограммистов, например, дизайнеров, которые могут изменять таблицу стилей и влиять на результаты.

Давайте посмотрим пример.

Поставленная задача

В данном руководстве мы возьмем XML-документ и преобразуем его в XHTML-документ, который можно отобразить как Web-страницу. Входные данные - это просто файл с рецептами(см. листинг 1).


Листинг 1. Основные данные

 

<recipes>

<recipe>

<name>Gush'gosh</name>

<ingredients>

 

<ingredient><qty>1</qty><unit>pound</unit>

<food>hamburger</food></ingredient>

 

<ingredient><qty>1</qty><unit>pound</unit>

<food>elbow macaroni</food></ingredient>

 

<ingredient><qty>2</qty><unit>cups</unit>

<food>brown sugar</food></ingredient>

<ingredient><qty>1</qty><unit>bag</unit>

<food>chopped onions</food></ingredient>

 

<ingredient><qty>1</qty><unit>teaspoon</unit>

<food>dried dill</food></ingredient>

</ingredients>

<instructions>

<instruction>Brown the hamburger.</instruction>

<instruction>Add onions and cook until

transparent.</instruction>

<instruction>Add brown sugar and dill.</instruction>

<instruction>Cook and drain pasta.</instruction>

<instruction>Combine meat and pasta.</instruction>

</instructions>

</recipe>

 

<recipe>

<name>A balanced breakfast</name>

<ingredients>

<ingredient><qty>1</qty><unit>cup</unit>

<food>cereal</food></ingredient>

 

<ingredient><qty>1</qty><unit>glass</unit>

<food>orange juice</food></ingredient>

 

<ingredient><qty>1</qty><unit>cup</unit>

<food>milk</food></ingredient>

 

<ingredient><qty>2</qty><unit>slices</unit>

<food>toast</food></ingredient>

</ingredients>

<instructions>

<instruction>Combine cereal and milk in

bowl.</instruction>

<instruction>Add all ingredients to table.</instruction>

</instructions>

</recipe>

 

</recipes>

 

Замечание редактора: Эти рецепты –приведены просто для примера, так, как их представляет себе автор. Правильный рецепт для Gush'gosh (полученный от его жены, которая и готовит это блюдо) состоит из 1 фунта (0,454 кг) рубленой говядины, 1 фунта рожков, 1/2стакана желтого сахара, 1 небольшого пакета (около 300 грамм) мелко нарезанного лука, 1 чайной ложки сушеного укропа и 1 небольшой банки томатной пасты, в которую добавляется желтый сахар.

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

Наша цель -преобразовать эти данные в XHTML-страницу, которая будет отображать рецепты по отдельности и форматировать их ингредиенты и инструкции по приготовлению (см. листинг 2).


Листинг 2. Результат

 

<?xml version="1.0" encoding="UTF-8"?>

<html xmlns="http://www.w3.org/TR/xhtml1/strict">

<head><title>Recipe</title></head>

<body>

<h2>Gush'gosh</h2>

<h3>Ingredients:</h3>

<p> 1 pound hamburger<br/>

1 pound elbow macaroni<br/>

2 cups brown sugar<br/>

1 bag chopped onions<br/>

1 teaspoon dried dill<br/>

</p>

<h3>Directions:</h3>

<ol>

<li>Brown the hamburger.</li>

<li>Add onions and cook until transparent.</li>

<li>Add brown sugar and dill.</li>

<li>Cook and drain pasta.</li>

<li>Combine meat and pasta.</li>

</ol>

 

<h2>A balanced breakfast</h2>

<h3>Ingredients:</h3>

<p>

1 cup cereal<br/>

1 glass orange juice<br/>

1 cup milk<br/>

2 slices toast<br/>

</p>

<h3>Directions:</h3>

<ol>

<li>Combine cereal and milk in bowl.</li>

<li>Add all ingredients to table.</li>

</ol>

</body>

</html>

 

Вы можете отобразить этот результат в браузере, как показано на рисунке 1.


Рисунок 1. Результат, отображенный в браузере
Результат, отображенный в браузере

Как уже упоминалось, конечной целью может быть любой формат, не только XHTML, и даже необязательно XML.

Давайте начнем с простых преобразований.

Простая таблица стилей

Самая простая таблица стилей - это просто XML документ, включающий XSLT-вывод (см. листинг 3).


Листинг 3. Самая простая таблица стилей

 

<html xsl:version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns="http://www.w3.org/TR/xhtml1/strict">

<head>

<title>Recipe</title>

</head>

<body>

<h2><xsl:value-of

select="/recipes/recipe/name"/></h2>

<h3>Ingredients:</h3>

<p><xsl:value-of

select="/recipes/recipe/ingredients"/></p>

<h3>Directions:</h3>

<p><xsl:value-of

select="/recipes/recipe/instructions"/></p>

</body>

</html>

 

Обратите внимание на использование пространства имен xsl. Добавление этого пространства имен говорит процессору, какие элементы связаны с обработкой, а какие должны быть просто выведены. Элементы value-of говорят процессору вставить определенные данные в это место. Какие именно данные вставлять определяется содержимым атрибута select.

Атрибут select состоит из выражения XPath. Подробнее XPath будет обсуждаться в разделе Подробнее об XPath, однако здесь вы можете видеть, что доступ к элементам "название", "ингредиенты" и"инструкция по приготовлению" происходит через иерархию документа. Мы начинаем с корневого элемента, /recipes, и от него движемся вниз.

Как выполнить преобразование

Простейший способ выполнить XML-преобразование - это добавить указание на таблицу стилей вXML и отобразить его в браузере (см. листинг 4).


Листинг 4. Добавление в XML инструкции по обработке при помощи таблицы стилей

 

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="/basicstylesheet.xsl" version="1.0"

?>

<recipes>

<recipe>

<name>Gush'gosh</name>

...

 

Эта инструкция по обработке говорит браузеру извлечь таблицу стилей, расположенную в basicstylesheet.xsl, и использовать ее для преобразования XML-данных и вывода результатов. Если вы откроете наш XML-документ в браузере Microsoft® Internet Explorer®, то увидите результат, похожий на рисунок 2.


Рисунок 2. Извлечение таблицы стилей и преобразованиеXML-данных
Извлечение таблицы стилей и преобразование XML-данных

Однако этоне совсем то, что мы хотели получить. Если вы выберете в браузере Вид>Просмотр HTML-кода, то увидите изначальный XML. Чтобы увидеть результат преобразования, необходимо произвести это преобразование и создать выходнойфайл. Это можно сделать через командную строку, используя Java-код со следующейкомандой (см. листинг 5):


Листинг 5. Преобразование документа через командную строку

 

java org.apache.xalan.xslt.Process -IN recipes.xml -XSL basicstylesheet.xsl -out

result.html

 

Если вы получите исключение ClassNotFoundException, возможно, вам нужно загрузить Apache Xalan (см. "Получить продукты и технологии" в разделе Ресурсы)и добавить включенные в него JAR-файлы в путь к классам.

Выполнив преобразование, показанное в листинге 5, вы увидите, что файл result.html содержит следующий код (см. листинг 6).


Листинг 6. Результаты

 

<?xml version="1.0" encoding="UTF-8"?>

<html xmlns="http://www.w3.org/TR/xhtml1/strict">

<head><title>Recipe</title></head>

<body>

<h2>Gush'gosh</h2>

<h3>Ingredients:</h3>

<p>

1poundhamburger

1poundelbow macaroni

2cupsbrown sugar

1bagchopped onions

1teaspoondried dill

</p>

<h3>Directions:</h3>

<p>

Brown the hamburger.

Add onions and cook until transparent.

Add brown sugar and dill.

Cook and drain pasta.

Combine meat and pasta.

</p>

</body></html>

 

Я добавил несколько интервалов для удобства чтения, однако здесь следует отметить пару моментов. Во-первых, листинг6 отображает информацию только для одного рецепта. Во-вторых, ингредиенты слеплены вместе без каких-либо пробелов. Это тоже не тот результат, который мы хотели получить. К счастью, можно создать более точные шаблоны для отображения данных именно в той форме, в какой вы хотите.

 

Добавить комментарий


Защитный код
Обновить