Вход/Регистрация
XSLT
вернуться

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

Шрифт:

<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>

  • Читать дальше
  • 1
  • ...
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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