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

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

Жанры

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

Шрифт:

<xsl:value-of select="@UNITS"/>

 </xsl:template>

 <xsl:template match="RADIUS">

<xsl:value-of select="."/>

<xsl:text> </xsl:text>

<xsl:value-of select="@UNITS"/>

 </xsl:template>

 <xsl:template match="DAY">

<xsl:value-of select="."/>

<xsl:text> </xsl:text>

<xsl:value-of select="@UNITS"/>

 </xsl:template>

</xsl:stylesheet>

Новый результат виден на рис. 3.2, на котором между числовыми значениями и их единицами измерения вставлены пробелы.

Рис. 3.2. Вывод значений атрибутов, второй вариант 

Как видите, элемент

<xsl:text>
весьма удобен. Тем не менее вам следует знать вот что: по умолчанию элементы
<xsl:text>
заменяют символы, которые могут входить в разметку, на эскейп-последовательности. Например,
<xsl:text>Here is а greater-than sign: ></xsl:text>
будет выведено как «Here is a greater-than sign: &gt;,», а не как «Herе is a greater-than sign: >». А если попытаться использовать < внутри элемента
<xsl:text>
, процессор XSLT посчитает, что вы пытаетесь открыть элемент внутри элемента
<xsl:text>
, что неверно. Как же вывести значащие символы, такие как < и >, если есть необходимость? Это можно сделать путем отключения вывода ESC-последовательностей (disabling output escaping).

УСОВЕРШЕНСТВОВАНИЯ В XSLT 2.0

Один из вопросов, которые призван решить XSLT 2.0, это упрощение импорта подобного текста без разбора из других файлов.

Отключение вывода эскейп-последовательностей

При помощи

<xsl:text>
можно включать в выходной документ непосредственно символы < и &, а не последовательности
&lt;
и
&amp;
. Для этого следует установить атрибут
disable-output-escaping
элемента
<xsl:text>
в yes («да», по умолчанию он установлен в
no
, «нет»). В приведенном ниже примере я при помощи
<xsl:text>
непосредственно пишу текст "
<PLANET/>
" в выходной документ:

<?xml version="1.0"?>

<xsl:stylesheet

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

 <xsl:template match="PLANETS">

<HTML>

<HEAD>

<TITLE>

Planets

</TITLE>

</HEAD>

<BODY>

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

</BODY>

</HTML>

 </xsl:template>

 <xsl:template match="PLANET">

<xsl:text disable-output-escaping="yes">

&lt;PLANET/&gt;

</xsl:text>

 </xsl:template>

</xsl:stylesheet>

Результат следующий:

<HTML>

 <HEAD>

<TITLE>

Planets

</TITLE>

 </HEAD>

 <BODY>

<PLANET/>

<PLANET/>

<PLANET/>

 </BODY>

</HTML>

Разумеется, не обязательно выводить

<PLANET/>
при помощи
<xsl:text>
: этот элемент можно было поместить непосредственно в элемент буквального результата. Но что делать в тех случаях, когда процессор XSLT не сможет распознать нужный нам в выходном документе элемент как фактический элемент? Например, в преобразованных документах XHTML вам потребуется
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
, но процессор XSLT сочтет, что это не хорошо сформированный XML. Как поместить этот элемент в выходные данные?

Можно попробовать поместить этот элемент в раздел

<!CDATA[ ]>
, как мы увидим в главе 6, и попытаться трактовать его как простые символьные данные, но процессоры XSLT все равно заменят < на
&lt;
, а > на
&gt;
.

Правильный способ добавить в вывод элемент

<!DOCTYPE>
— использовать атрибут
doctype-public
элемента
<xsl:output>
, как мы увидим в главе 6, но в качестве демонстрации для этих целей здесь я отключу вывод ESC-последовательностей в элементе
<xsl:text>
(хотя этот способ не рекомендован для создания элементов
<!DOCTYPE>
). Вот как это выглядит:

<?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:text disab1e-output-escaping="yes">

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"&gt;

</xsl:text>

<HTML>

<HEAD>

<TITLE>

The Planets Table

</TITLE>

</HEAD>

<BODY>

<H1>

The Planets Table

</H1>

<TABLE BORDER="2">

<TD>Name</TD>

<TD>Mass</TD>

<TD>Radius</TD>

<TD>Day</TD>

<xsl:apply-templates/>

</TABLE>

</BODY>

</HTML>

 </xsl:template>

 <xsl:template match="PLANET">

<TR>

<TD><xsl:value-of select="NAME"/></TD>

<TD><xsl:apply-templates select="MASS"/></TD>

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

XSLT

Холзнер Стивен
Компьютеры и Интернет:
программирование
интернет
5.00
рейтинг книги
XSLT

Барон Бранд Берс. Том 2

Limonad
2. Бранд Берс
Проза:
магический реализм
5.00
рейтинг книги
Барон Бранд Берс. Том 2

78

Фрай Макс
Фантастика:
фэнтези
7.00
рейтинг книги
78

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Чужой ребенок

Зайцева Мария
1. Чужие люди
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Чужой ребенок

Путь

Yagger Егор
Фантастика:
космическая фантастика
4.25
рейтинг книги
Путь

Печать пожирателя 2

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

Чайлдфри

Тоцка Тала
Любовные романы:
современные любовные романы
6.51
рейтинг книги
Чайлдфри

Слово воина

Прозоров Александр Дмитриевич
1. Ведун
Фантастика:
фэнтези
8.91
рейтинг книги
Слово воина

Инженер Петра Великого 3

Гросов Виктор
3. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого 3

Метатель. Книга 2

Тарасов Ник
2. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 2

Целого Мира Мало

Джиллиан Алекс
Любовные романы:
современные любовные романы
8.88
рейтинг книги
Целого Мира Мало

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

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