Чтение онлайн

на главную - закладки

Жанры

Холзнер Стивен

Шрифт:

 </xsl:template>

</xsl:stylesheet>

Вот как это делается; посмотрите теперь на результирующий документ, в котором значения в различных элементах были преобразованы в атрибуты:

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

<PLANETS>

 <PLANET DAY="58.65" RADIUS="1516" MASS=".0553" NAME="Mercury"/>

 <PLANET DAY="116.75" RADIUS="3716" MASS=".815" NAME="Venus"/>

 <PLANET DAY="1" RADIUS="2107" MASS="1" NAME="Earth"/>

</PLANETS>

Предположим

теперь, что нам также нужно включить все единицы измерения. Каждый элемент
<MASS>
,
<NAME>
и
<RADIUS>
содержит атрибут
UNITS
, задающий единицы измерения, и можно извлечь эти значения. Контекстным узлом является элемент
<PLANET>
, поскольку шаблон установлен для выбора этого элемента, поэтому на дочерние элементы
<MASS>
,
<NAME>
и
<RADIUS>
можно ссылаться как "
MASS
", "
NAME
" и "
RADIUS
". Для обращения к атрибуту
UNITS
этих элементов можно использовать синтаксис "
MASS/@UNITS
", "
NAME/@UNITS
", и "
RADIUS/@UNITS
":

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:output method="xml"/>

 <xsl:template match="PLANETS">

<xsl:copy>

<xsl:apply-templates select="PLANET"/>

</xsl:copy>

 </xsl:template>

 <xsl:template match="PLANET">

<PLANET NAME="{NAME}"

MASS="{MASS} {MASS/@UNITS}"

RADIUS="{RADIUS} {RADIUS/@UNITS}"

DAY="{DAY} {DAY/@UNITS}"/>

 </xsl:template>

</xsl:stylesheet>

И вот результат, включающий единицы измерения:

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

<PLANETS>

 <PLANET DAY="58.65 days" RADIUS="1516 miles"

MASS=".0553 (Earth = 1)" NAME="Mercury"/>

 <PLANET DAY="116.75 days" RADIUS="3716 miles"

MASS=".815 (Earth = 1)" NAME="Venus"/>

 <PLANET DAY="1 days" RADIUS="2107 miles"

MASS="1 (Earth = 1)" NAME="Earth"/>

</PLANETS>

Заметьте, что в шаблонах значений атрибутов нельзя использовать вложенные фигурные скобки, и в выражении, использующем фигурные скобки, — таком как

function printHello {cout << 'Hello';}
— фигурные скобки необходимо удваивать, для того чтобы процессор XSLT их игнорировал:
function printHello {{cout<<'Hello';}}
.

Шаблоны

значений атрибутов всегда работают с контекстным узлом. Тем не менее, нельзя использовать шаблоны значений атрибутов в произвольном месте таблицы стилей, что зачастую и вызывает затруднения у XSLT-разработчиков. Шаблоны значений атрибутов можно использовать только в следующих местах:

• элементы буквального результата;

• элементы расширения (см. главу 5);

• 

<xsl:attribute>
. Здесь можно использовать атрибуты
name
и
namespace
(см. главу 6);

• 

<xsl:element>
. Здесь можно использовать атрибуты
name
и
namespace
(см. главу 6);

• 

<xsl:number>
. Здесь можно использовать атрибуты
format
,
lang
,
letter-value
,
grouping-separator
и
grouping-size
(см. главу 4);

• 

<xsl:processing-instruction>
. Здесь можно использовать атрибут
name
(см. главу 6);

• 

<xsl:sort>
. Здесь можно использовать атрибуты
lang
,
data-type
,
order
и
case-order
(см. главу 5).

В главе 6 эта тема рассмотрена более подробно: мы узнаем, как создавать атрибуты (и новые элементы) с нуля. Дополнительная информация об использовании выражений XPath в шаблонах значений атрибутов приведена в главе 7.

Обработка символов-разделителей

Поначалу символы-разделители (whitespace) доставляют авторам XSLT много хлопот. В главе 2 объяснялось, что «чистые» узлы-разделители — это текстовые узлы, содержащие только символы-разделители (пробелы, возвраты каретки, переводы строки и символы табуляции). Эти узлы по умолчанию копируются из исходного документа.

Заметьте, что в таблице стилей также могут быть узлы-разделители:

<xsl:template match="PLANETS">

 <xsl:copy>

<xsl:apply-templates select="PLANET"/>

 </xsl:copy>

</xsl:template>

В нашем случае пробелы используются для выравнивания элементов таблицы стилей, а возвраты каретки — для разрежения кода. Чистые узлы-разделители, такие, как этот, не копируются из таблицы стилей в выходной документ. Заметьте, однако, что разделитель из следующего элемента

<TITLE>
копируется в выходной документ, так как это не чистый узел-разделитель (он также содержит текст «The Planets Table»):

<xsl:template match="/PLANETS">

 <HTML>

<HEAD>

<TITLE>

The Planets Table

</TITLE>

.

.

.

Если вы хотите убрать этот разделитель и сохранить выравнивание, можно использовать пустые элементы

<xsl:text>
, так чтобы символы-разделители стали чистыми узлами-разделителями:

Поделиться:
Популярные книги

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Измена. Испорченная свадьба

Данич Дина
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Измена. Испорченная свадьба

Блуждающие огни

Панченко Андрей Алексеевич
1. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Блуждающие огни

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Затерянные земли или Великий Поход

Михайлов Дем Алексеевич
8. Господство клана Неспящих
Фантастика:
фэнтези
рпг
7.89
рейтинг книги
Затерянные земли или Великий Поход

Адвокат Империи 2

Карелин Сергей Витальевич
2. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 2

Газлайтер. Том 6

Володин Григорий
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Невеста снежного демона

Ардова Алиса
Зимний бал в академии
Фантастика:
фэнтези
6.80
рейтинг книги
Невеста снежного демона

Законы Рода. Том 3

Flow Ascold
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Пипец Котенку! 2

Майерс Александр
2. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пипец Котенку! 2