</B>

 <C>

  <B/>

 </C>

</A>

Следует быть осторожными при использовании indent='yes' там, где в содержимом документа могут встречаться значащие пробелы. Индентация позволяет процессору при выводе документа добавлять пробельные символы по собственному усмотрению. В случаях, когда при последующей обработке преобразованного документа пробельные символы могут быть восприняты неадекватно, лучше индентацию не использовать.

Атрибут cdata-section-elements

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

Пример Листинг 8.41. Входящий документ

<?xml version='1.0' encoding='utf-8'?>

<page>&lt;br/&gt;<br/></page>

Листинг 8.42. Преобразование

<xsl:stylesheet

 version='1.0'

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

 <xsl:output

  indent='yes'

  cdata-section-elements='page'/>

 <xsl:template match='/'>

  <xsl:copy-of select='/'/>

 </xsl:template>

</xsl:stylesheet>

Листинг 8.43. Выходящий документ

<?xml version='1.0' encoding='utf-8'?>

<page><![CDATA[<br/>]]><br/>

</page>

В соответствии с синтаксисом XML, секции CDATA не могут содержать последовательности символов ']]>'. Потому, встретив такую комбинацию в тексте элемента, имя которого включено в cdata-section-elements, процессор заменит ее двумя секциями CDATA. Одна будет содержать ']]', вторая – '>'.

Пример Листинг 8.44. Входящий документ

<?xml version='1.0' encoding='utf-8'?>

<page>

 <data>]]&gt;</data>

 <pre>&lt;!-- Comment --></pre>

</page>

Листинг 8.45. Преобразование

<xsl:stylesheet

 version='1.0'

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

 <xsl:output

 indent='yes'

 cdata-section-elements='data pre'/>

 <xsl:template match='/'>

  <xsl:copy-of select='/'/>

 </xsl:template>

</xsl:stylesheet>

Листинг 8.46. Выходящий документ

<?xml version='1.0' encoding='utf-8'?>

<page>

 <data><![CDATA[]]]]><![CDATA[>]]></data>

 <pre><![CDATA[<!-- Comment -->]]></pre>

</page>

Атрибут doctype-system

Для определения логической структуры документов в XML используются DTD — определения типов документов. В большинстве случаев определения типов содержатся во внешних ресурсах, которые включаются в документ в виде системных или публичных идентификаторов.

XSLT позволяет создавать ссылки на внешние определения типов при помощи атрибута doctype-system элемента xsl:output.

Пример

Предположим, что мы создаем документ, логическая схема которого определена во внешнем файле по адресу '/dtds/document.dtd'. Тогда, определив в преобразовании элемент xsl:output с атрибутом doctype-system, равным '/dtds/document.dtd', мы получим в выходящем документе определение типа в виде

<!DOCTYPE элемент SYSTEM '/dtds/document.dtd'>

где элемент — первый элемент выходящего документа.

Листинг 8.47. Входящий документ

<?xml version='1.0' encoding='utf-8'?>

<page> content </page>

Листинг 8.48. Преобразование

<xsl:stylesheet

 version='1.0'

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

 <xsl:output indent='yes' doctype-system='/dtds/document.dtd'/>

 <xsl:template match='/'><xsl:copy-of select='/'/></xsl: template>

</xsl:stylesheet>

Листинг 8.49. Выходящий документ

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE page SYSTEM '/dtds/document.dtd'>

<page> content </page>

Атрибут doctype-public

Если в преобразовании атрибутом doctype-system элемента xsl:output задано внешнее определение логического типа документа, это определение может быть расширено также и

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату