Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы XML-технологий. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Эта инструкция по обработке устанавливает связь между новой
C
SS
X
аблицей, созданной вами, и
-т Сохраните файл под именем
в браузере. Браузер отобразит файл с правилами, установленными в таблице стилей
окументом.
-д
ML
atalogCSS3.xml
C
C
atalogCSS3.xml
и
откройте его
соответствии
в
atalogCSS3.css
C
(см. Рис. 4.4).
4.3
ПРИМЕНЕНИЕ XSL
4.3.1
С
при использовании
О
НО ВЫ ИСПО ЛЬЗОВАНИЯ
С
уществуют два основных шага для отображения
X
SL
аблицы стилей.
-т
Создание файла XSL-таблицы стилей.
нием
X
ML
подобно любому
и
X
ML
-док
SL-
X
АБ ЛИЦ СТИЛЕ Й
Т
-д
XML
вляется приложе-
я
XSL
окумента
ументу, вы можете создать ее
с помощью любого текстового редактора.
Связывание XSL-таблицы стилей с XML-документом.
Вы можете связать
-ф
SL
айл с
X
-д
X
окументом, включив в документ
ML
x
инструкцию по обработке обобщенную форму записи, где
ml-stylesheet
U
RLТаблСтил
которая имеет следующую
,
–
,
задающий распо-
U
RL
ложение файла таблицы стилей:
?xml-stylesheet type="text/xsl" href=XSLFilePath?>
<
ml-
В
нашем примере аналогичная инструкция по обработке
stylesheet
?xml-stylesheet type="text/xsl" href="CatalogXSL01.xsl"?>
<
4.3.2
В
отличие от
меет вид:
и
И
ПОЛЬ ЗОВАН ИЕ ОДНО ГО ШАБЛ ОНА
С
CS
SL
X
,
S
-та
SL
X
блица стилей включает один или
x
несколько шаблонов, каждый из которых содержит информацию для отображения в определенной ветви элементов в
SL
Рассмотрим простую
1. Сначала создадим и сохраним
<
!-- Имя файла: CatalogXSL01.xml-->
X
-таблицу стилей с одним шаблоном.
-д
окумент
ML
X
C
atalogXSL01.xml
XM
-д
окументе.
L
.
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="CatalogXSL01.xsl"?> <book>
13
1
<title>Капитанская дочка</title> <author> <firstname>Александр</firstname> <lastname>Пушкин</lastname> </author> <binding>твердый переплет</binding> <pages>267</pages> <price>250 руб.</price> </book>
Далее введем таблицу стилей с единственным шаблоном,
2.
содержащим информацию для отображения всего документа. На листинге представлен пример
одним шаблоном.
с
<!-- Имя файла: CatalogXSL01.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <H2>Описание книги</H2> <SPAN STYLE="font-style:italic">Автор: </SPAN> <xsl:value-of select="book/author"/><BR/> <SPAN STYLE="font-style:italic">Название: </SPAN> <xsl:value-of select="book/title"/><BR/> <SPAN STYLE="font-style:italic">Цена: </SPAN> <xsl:value-of select="book/price"/><BR/> <SPAN STYLE="font-style:italic">Тип переплета: </SPAN> <xsl:value-of select="book/binding"/><BR/> <SPAN STYLE="font-style:italic">Количество страниц: </SPAN>
XSL
блицы стилей
-та
CatalogXSL01.xsl
<xsl:value-of select="book/pages"/> </xsl:template> </xsl:stylesheet>
13
2
3. Теперь эту таблицу стилей необходимо связать с
том
C
atalogXSL01.xml
документа
?xml-stylesheet type="text/xsl" href="CatalogXSL01.xsl"?>
<
4.
Откроем файл
atalogXSL01.xml
C
созданным выше. Для этого в пролог
,
д
обавляется строка
talogXSL01.xml
Ca
с
помощью браузера.
На Рис. 4.5 показано, как браузер отображает
atalogXSL01.xml
C
atalogXSL01.xsl
C
в
соответствии с инструкциями из таблицы стилей
.
-д
X
X
ML
окумен-
ML
-документ
X
ML
-
Рис. 4.5 Отображение XML-документа с помощью XSL
X
теперь проанализируем структуру
А
SL
окумента и рассмот-
-д
рим, каким образом с его помощью происходит отображение в брау-
X
ML
зере
представленный ниже. (Напомним, что элемент как корневой элемент, является
-д
окумента.
Каждая
SL
X
-т
аблица стилей должна иметь элемент
Д
XM
окумент
L
-эл
ементом верхнего уровня,
,
окумент
Д
известный
который содержит все остальные элементы) .
В
X
<
xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- Один или несколько элементов шаблона --> </xsl:stylesheet>
лемент
Э
окументе корневым элементом
-д
SL
x
sl:stylesheet
ужит не только хранилищем других эле-
сл
x
sl:stylesheet
вляется
я
,
ментов, но также идентифицирует документ как
13
3
блицу стилей.
-та
X
SL
Этот элемент является одним из
-э
X
лементов специального назна-
SL
чения, используемых в таблице стилей.
SL
X
Все
-э
лементы принадлежат пространству имен
предваряете имя каждого
X
SL
x
емента префиксом
-эл
sl
x
, т
. е. вы
обозначаю-
,
sl:
щим пространство имен. Вы определяете это пространство имен в начальном теге элемента
x
sl:stylesheet
например, следующим
,
образом:
x
mlns:xsl="http://www.w3.org/1999/XSL/Transform"
то определение позволяет вам использовать пространство имен
Э
внутри элементов таблицы стилей.
Элемент
Д
окумент
x
sl:stylesheet XSL
аблицы стилей должен содер-
-т жать один или несколько шаблонов элементов, которые для краткости будем называть шаблонами. Элемент
окумент
и
з приве-
Д
денного примера содержит только один шаблон, который имеет следующую форму:
<
xsl:template match="/"> <!-- Дочерние элементы --> </xsl:template>
Б
раузер использует шаблон для отображения определенной ветви элементов в иерархии ваете таблицу ленную
начение атрибута
З
вет
ст
илей.
вь. (Атрибут
в данном примере (
окумента. Этот шаблон, таким образом, содержит инструкции для
д отображения всего
Каждая
-т
аблица стилей должна содержать один и только
SL
X
Ат
рибут
m
atch
осит название образца (
m
X
н
atch
"
/"
представляет корневой элемент всего
)
ML
окумента.
-д
один шаблон с атрибутом
-док
XML
m
алогичен селектору в правиле
ан
mat
умента, с которым вы связы-
atch
ш
аблона
ch
который имеет значение
,
у
казывает
p
attern
н
оп
а
реде-
C
SS
).
. Образец
)
X
ML
-
"
/"
Вы также можете включить один или несколько дополнительных шаблонов с инструкциями для отображения определенных подчи-
.
ненных ветвей в структуре
-д
окумента; каждая из них должна
ML
X
иметь образец, отвечающий определенной ветви.
Шаблон содержит два вида
X
-э
лементов.
ML
13
4
XML-элементы, представляющие HTML-разметку. Примерами
подобного вида
XM
емента из рассматриваемой таблицы стилей
-эл
L
являются:
–
<
H2>Описание книги</H2>
оторый отображает заголовок второго
, к
уровня;
–
<S
PAN STYLE="font-style:italic">Название: </SPAN>
блок текста, набранного курсивом (
– <BR/>
Все эти и представляют стандартные рует каждый
оторый создает пустую строку.
, к
ML
X
-элементы являются корректно сформированными
HTML
H
TML
-э
лемент непосредственно на выход
Au
-э
:
лементы. Браузер просто копи-
;
)
thor
который отображает
,
воспринимает и отображает их.
одсказка. Каждый из элементов, представляющих
П
должен быть корректно сформированным
HTML
-э
лементом. (Не забывайте, что
ным д
окументом). Следовательно, вы не можете использовать
XML
XSL
-эл
ементом, а также стандарт-
-т
аблица стилей является
H
TML
TML
H
HTML
,
который
зметку,
-ра
XML
-к
онструк-
-
ции, которые не являются корректно сформированным элементы, состоящие только из начального тега. Например, чтобы задать
TML
H
элемент перевода строки в
ML
HT
это делаете для ректно сформированный тег пустого
X
SL-элементы. Примерами
-с
траницы. Вместо этого вы должны использовать кор-
таблицы стилей являются элементы
xsl:value-of select="book/author"/><BR/>
<
SL
Б
раузер отличает поскольку первый имеет в качестве префикса описание про-
TML
,
H
странства имен
TML
H
данных
ного
Они лишь содержат инструкции по выбору и модификации
.
ли
бо используются для выполнения других задач.
емент
емента (а также любых его дочерних элементов, которые
X
SL
-эл
XML
X
-эл
ML
sl:
x
alue-of
v
.
X
SL
X
-эл
д
,
вы не можете просто ввести
X
ML
лемента,
-э
X
SL
-эл
ементов из рассматриваемой
l:value-of
xs
-эл
емент от элемента, представляющего
<
BR/>
,
например:
ементы в шаблоне не копируются на выход
обавляет текстовое содержимое определен-
ML
такие, как
X
,
BR>
<
,
как вы
.
TML
он имеет) в выходной модуль
H
который воспринимается
,
и отображается браузером. Вы указываете определенный
13
5
XML
-
элемент заданием образца, который присваиваете атрибуту
X
SL
v
alue-of
емента
-эл В рассмотренном выше примере элемента
п
рисвоен образец содержимого элемента элемента
au
thor
со
двум его дочерним элементам,
Обратите внимание, что щью оператора пути (в данном случае ляет местонахождение элемента в иерархии
.
alue-of
"
book/author"
uthor
a
v
что приводит к выводу текстового
,
ML
X
-документа. Текстовое содержимое
ат
рибуту
стоит из символьных данных, принадлежащих
irstname
f
XML
лемент в образце задается с помо-
-э
astname
l
и
ook/author
b
X
.
), который опреде-
-д
окумента. (Опера-
ML
se
elect
s
lect
тор пути аналогичен пути к файлу, который операционная система использует для указания местонахождения файла или папки).
Главный момент, на который здесь следует обратить внимание,
se
состоит в том, что оператор пути в значении атрибута относится к текущему элементу. Каждый контекст внутри
lect
XSL
-
аблицы стилей относится к текущему элементу. Поскольку
т рассматриваемый пример шаблона относится к корневому элементу всего документа (посредством установки атрибута
элементом»
текущим
«
я данного шаблона является корневой
дл
m
atch="/"
),
элемент документа.
Таким образом, внутри этого шаблона оператор пути
thor
указывает на элемент
au
, вложенный в элемент
b
b
ook/author
ook
, который,
в свою очередь, вложен в корневой элемент документа.
Если вы опустите атрибут
se
lect
для
SL
X
-элемента
alue-of
v
, элемент будет осуществлять вывод текстового содержимого плюс текстовое содержимое всех дочерних элементов текущего элемента.
select
(В примере пропуск атрибута
X
символьных данных
ML
окумента).
-д
Целью создания шаблона элементов, представленного
рассматриваемом примере, является отображение текста названия
в
п
риведет к выводу всех
для каждого из дочерних
-элементов (
ML
X
uthor, title, price, binding
a
,
ages
p
)
в документе, а также текстового содержимого каждого элемента.
va
Обратите внимание, что порядок элементов
lue-of
в шаблоне опре-
деляет порядок, в котором браузер отображает эти элементы.
13
6
Таким образом, даже из этой простой таблицы стилей вы можете
понять, что
SS
C
,
которая всегда отображает элементы в том порядке, в котором
X
аблица стилей является гораздо более гибкой, чем
-т
SL
они следуют в документе.
SL
H
X
-таблица стилей сообщает брау-
TML
-разметки, который восприни-
Итак, как вы могли заметить,
зеру, как отобразить
ML
вания
X
-элементов в блок
X
ML
-д
окумент путем избирательного преобразо-
мается и отображается браузером аналогично разметке, содержа-
TML
щейся на
H
-странице. При этом не нужно включать в элементы, представляющие элементы браузер сам эффективно их формирует.
. 4.6
Р
ис
п
оказано, как браузер генерирует первую часть блока
зметки для документа и таблицы стилей.
HTML
Н
-
а
ра
TML
H
ил
и
ODY
B
SL
X
-шаблон
,
поскольку
с. 4.6 Преобразование XML-документа в HTML-код
Ри
13
7
4.3.3
В
д
окумент содержал только один элемент
мент содержит несколько элементов
ОТ
ОБ РАЖЕНИЕ П ЕРЕМЕ НН ОГО Ч ИС ЛА ЭЛ ЕМЕНТОВ
примере, рассмотренном в предыдущем подразделе,
b
. В случае, если доку-
book
ook
,
методика, с которой вы
X
ML
-
познакомились в предыдущем подразделе, способна отобразить
X
ML
только один из элементов. Возьмем, для примера,
C
atalogXSL02
<
!-- Имя файла: CatalogXSL02.xml--> <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="CatalogXSL02.xsl"?> <inventory> <book> <title>Капитанская дочка</title> <author> <firstname>Александр</firstname> <lastname>Пушкин</lastname>
.
двумя элементами
с
x
ml
bo
ok
.
-д
окумент
</author> <binding>мягкий</binding> <pages>267</pages> <price>250 руб.</price> </book>
<book> <title>Анна Каренина</title> <author> <firstname>Лев</firstname> <lastname>Толстой</lastname> </author> <binding>твердый</binding> <pages>563</pages> <price>365 руб.</price> </book> </inventory>
ля отображения этого документа мы не сможем воспользо-
Д
ваться шаблоном, рассмотренным выше. Этот шаблон использует методику, описанную в предыдущем подразделе. Согласно этой
13
8
методике, образец, присваиваемый каждому атрибуту ется с указания элемента
о каждый такой образец в новом
Н
Д
окумент
двум различным элементам. Например,
uthor
вует элементу
a
для обоих элементов
в данном случае
,
L
XM
-д
окументе соответствует
"in
ventory/book/author"
ook
b
. В подобной ситуации
i
nventory
s
elect
.
с
,
начина-
оответст-
браузер использует только первый из соответствующих элементов. Таким образом, таблица стилей отобразит содержимое только первого элемента
тобы отобразить все отвечающие образцу элементы, следует
Ч
использовать вывод для каждого из содержащихся в т
аблица стилей, приведенная ниже, демонстрирует данную методику
<!-- File name: CatalogXSL02.xsl -->
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
book
.
-э
лемент
SL
X
or-each
f
,
который вызывает повторный
X
ML
-фа
йле элементов.
X
SL
-
<xsl:template match="/"> <H2>Описание книг</H2> <xsl:for-each select="inventory/book"> <SPAN STYLE="font-style:italic">Название: </SPAN> <xsl:value-of select="title"/><BR /> <SPAN STYLE="font-style:italic">Автор: </SPAN> <xsl:value-of select="author"/><BR /> <SPAN STYLE="font-style:italic">Тип переплета: </SPAN> <xsl:value-of select="binding"/><BR />
<SPAN STYLE="font-style:italic">Количество страниц: </SPAN> <xsl:value-of select="pages"/><BR /> <SPAN STYLE="font-style:italic">Цена: </SPAN> <xsl:value-of select="price"/><P /> </xsl:for-each> </xsl:template> </xsl:stylesheet>
.
та таблица стилей предназначена для отображения
Э
документа
net Explorer
в
.
, и
C
atalogXSL02
x
в результате ее применения браузер
ml
ыводит отображение, приведенное на Рис. 4.7.
13
9
X
In
ML
ter-
-
с. 4.7 Отображение XML-документа с помощью XSL
Ри
r-each
Элемент
fo
выполняет две основные задачи:
– осуществляет вывод блока элементов, содержащихся внутри
элемента
for-each
повторяя его для каждого
,
менте, отвечающего образцу, присвоенному атрибуту
for-each
каждого элемента
inventory
В данном примере цикл выполняется по одному разу для
.
,
найденного в элементе Документ с именем
ook
b
Образец, присваиваемый атрибуту
.
XML
select
емента в доку-
-эл эл
elect
s
емента
эл
емента
for-each
работает точно так же, как образец, присваиваемый атрибуту
лемента
э
value-of
– внутри элемента ваемый атрибутом примере указывает на элемент
;
задает текущий элемент, устанавли-
емента
bo
ok
or-each
f
внутри элемента
/in
(
ventory/book
i
nventory
нашем
в
elect
s
f
or-each
эл
,
lect
se
), как
показано ниже
<
xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <!--Здесь текущим является корневой элемент документа “/” --> <xsl:for-each select="inventory/book"> <!--Здесь текущим является элемент inventory/book -->
14
0
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]