</B>
<C>
<B/>
</C>
</A>
Следует быть осторожными при использовании indent='yes'
там, где в содержимом документа могут встречаться значащие пробелы. Индентация позволяет процессору при выводе документа добавлять пробельные символы по собственному усмотрению. В случаях, когда при последующей обработке преобразованного документа пробельные символы могут быть восприняты неадекватно, лучше индентацию не использовать.
Для того чтобы вывести текстовое содержимое некоторых элементов в виде секций CDATA, XSLT предлагает простой механизм — следует лишь перечислить в атрибуте cdata-section-elements
элемента xsl:output
элементы, которые на выходе должны содержать секции символьных данных.
<?xml version='1.0' encoding='utf-8'?>
<page><br/><br/></page>
<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>
<?xml version='1.0' encoding='utf-8'?>
<page><![CDATA[<br/>]]><br/>
</page>
В соответствии с синтаксисом XML, секции CDATA не могут содержать последовательности символов ']]>
'. Потому, встретив такую комбинацию в тексте элемента, имя которого включено в cdata-section-elements
, процессор заменит ее двумя секциями CDATA. Одна будет содержать ']]
', вторая – '>
'.
<?xml version='1.0' encoding='utf-8'?>
<page>
<data>]]></data>
<pre><!-- Comment --></pre>
</page>
<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>
<?xml version='1.0' encoding='utf-8'?>
<page>
<data><![CDATA[]]]]><![CDATA[>]]></data>
<pre><![CDATA[<!-- Comment -->]]></pre>
</page>
Для определения логической структуры документов в XML используются DTD — определения типов документов. В большинстве случаев определения типов содержатся во внешних ресурсах, которые включаются в документ в виде системных или публичных идентификаторов.
XSLT позволяет создавать ссылки на внешние определения типов при помощи атрибута doctype-system
элемента xsl:output
.
Предположим, что мы создаем документ, логическая схема которого определена во внешнем файле по адресу '/dtds/document.dtd'
. Тогда, определив в преобразовании элемент xsl:output
с атрибутом doctype-system
, равным '/dtds/document.dtd'
, мы получим в выходящем документе определение типа в виде
<!DOCTYPE
где
— первый элемент выходящего документа.
<?xml version='1.0' encoding='utf-8'?>
<page> content </page>
<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>
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE page SYSTEM '/dtds/document.dtd'>
<page> content </page>
Если в преобразовании атрибутом doctype-system
элемента xsl:output
задано внешнее определение логического типа документа, это определение может быть расширено также и