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

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

Шрифт:

</TABLE>

 </BODY>

</HTML>

Результат показан на рис. 6.3 (в том числе — оглавление из гиперссылок). Пользователю достаточно щелкнуть на гиперссылке к соответствующей записи в таблице.

Рис. 6.3. Использование сгенерированных идентификаторов в гиперссылках

Создание разделов CDATA

При преобразованиях XML-XML может потребоваться вывести разделы CDATA. В XSLT это легко осуществимо при помощи атрибута

cdata-section-elements
элемента
<xsl:output>
. Упомянутый атрибут позволяет указать, содержимое каких элементов следует заключить в раздел CDATA. Последнее может понадобиться, например, при создании элементов сценария, когда браузер требует заключения кода сценария в раздел CDATA.

В следующем примере я поместил содержимое элементов

<NAME>
и
<MASS>
в
planets.xml
в разделы
CDATA
:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:output method="xml" cdata-section-elements="NAME MASS"/>

 <xsl:template match="@*|node">

<xsl:copy>

<xsl:apply-templates select="@*|node"/>

</xsl:copy>

 </xsl:template>

</xsl:stylesheet>

И вот результат:

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

<?xml-stylesheet type="text/xml" href="#"?>

<PLANETS>

 <PLANET>

<NAME><![CDATA[Mercury]]></NAME>

<MASS UNITS="(Earth = 1)"><![CDATA[.0553]]></MASS>

<DAY UNITS="days">58.65</DAY>

<RADIUS UNITS="miles">1516</RADIUS>

<DENSITY UNITS="(Earth = 1)">.983</DENSITY>

<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

 </PLANET>

 <PLANET>

<NAME><![CDATA[Venus]]></NAME>

<MASS UNITS="(Earth = 1)"><![CDATA[.815]]></MASS>

<DAY UNITS="days">116.75</DAY>

<RADIUS UNITS="miles">3716</RADIUS>

<DENSITY UNITS="(Earth = 1)">.943</DENSITY>

<DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->

 </PLANET>

 .

 .

 .

ОБРАБОТКА CDATA В ИСХОДНОМ И РЕЗУЛЬТИРУЮЩЕМ ДОКУМЕНТЕ

Рассмотренная техника создает разделы CDATA результирующего документа, она не рассматривает как CDATA какие-либо данные исходного документа. Например, если вам нужно преобразовать <script>if х < у {...} </script> в <script><![CDATA[if х < у {...}]]></script>, поскольку ваш браузер требует, чтобы код сценария заключался в разделы CDATA, процессор XSLT испытает трудности с символом < в «х < у». В этом случае необходимо написать <script>if х &lt; у {...} </script>, для того чтобы процессор XSLT сгенерировал <script><![CDATA[if х < у {...}]]> </script>. 

Установка кодировки символов

Для значительных переработок исходных документов важно знать, что можно устанавливать кодировку символов в результирующих документах при помощи атрибута encoding элемента

<xsl:output>
. Однако нет гарантии, что ваш процессор XSLT будет поддерживать выбранную кодировку, поскольку процессоры обязаны поддерживать только кодировки UTF-8 и UTF-16. С другой стороны, если вы используете символ, не поддерживаемый в используемой кодировке, процессор XSLT либо выведет символ как ссылку на сущность, либо сгенерирует ошибку.

ЕЩЕ О КОДИРОВКАХ СИМВОЛОВ

Принятые кодировки символов указаны в рекомендации XML 1.0, www.w3.org/TR/REC-xml.

Атрибут

encoding
не обязателен в объявлении XML документа; если он отсутствует, разборщики XML по умолчанию принимают кодировку UTF-8. Если вы хотите явно задать кодировку или использовать другую, ее можно задать следующим образом — там, где я задаю кодировку UTF-16:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

  • Читать дальше
  • 1
  • ...
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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