Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лабы / Lab4-03.doc
Скачиваний:
12
Добавлен:
12.05.2015
Размер:
596.99 Кб
Скачать

3.3.5.3. Встроенные правила шаблона

В спецификации определены несколько встроенных правил шаблона, которые должен реализовать любой процессор XSLT.

Первое встроенное правило шаблона позволяет рекурсивно продолжать обработку в отсутствии успешного сравнения с явным правилом шаблона в стиле. Это правило шаблона используется как для узлов элементов, так и для корневого узла и определяется следующим образом:

<xsl:template match="*|/">

<xsl:apply-templates/>

</xsl:template>.

Для каждого метода также есть встроенное правило шаблона, позволяющее рекурсивно продолжать обработку в том же самом режиме, в отсутствии успешного сравнения с образцом из явного правила шаблона в этом стиле. Это правило шаблона применяется как для узлов элементов, так и для корневого узла. Далее приведен эквивалент встроенного правила шаблона для режима m.

<xsl:template match="*|/" mode="m">

<xsl:apply-templates mode="m"/>

</xsl:template>.

Также есть встроенное правило шаблона для текстовых узлов и узлов атрибутов, которое просто копирует текст:

<xsl:template match="text()|@*">

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

</xsl:template>.

Для инструкций обработки и комментариев встроенное правило шаблона не должно делать ничего:

<xsl:template match="processing-instruction()|comment()"/>

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

Встроенные правила шаблона обрабатываются так, как будто они были неявно импортированы раньше стиля, а потому имеют меньший приоритет импорта, чем все остальные правила шаблона. Таким образом, автор можно переопределить встроенное правило шаблона, явно включив новое правило шаблона.

3.3.5.4. Обработка пробельных символов

В XSLTвыделяются четыре пробельных символа, обработка которых не­сколько отличается от обработки других символов. Это следующие символы:

  • пробел (десятичный код: #32, шестнадцатеричный код#x20);

  • перевод строки (десятичный код: #10, шестнадцатеричный код#xA);

  • возврат каретки (десятичный код: #13, шестнадцатеричный код#xD);

  • горизонтальная табуляция (десятичный код: #9, шестнадцатеричный код#x9).

При обработке процессором XSLTтекстовый узел будет сохранен при выполнении хотя бы одного из следующих условий.

  • Он содержит хотя бы один непробельный символ.

  • Он принадлежит элементу, в котором сохранение пробельных символов задано средствами XML, а именно атрибутом xml:spaceсо значениемpreserve.

  • Он принадлежит элементу, имя которого включено во множество имен элементов, для которых нужно сохранять пробельные символы.

Во всех остальных случаях текстовый узел будет удален.

Для преобразований сохраняющее множество состоит из единственного элемента xsl:text, то есть единственный элемент в преобразовании, для которого пробельные текстовые узлы не будут удаляться, – это элементxsl:text. Поэтому его часто используют для вывода в выходящем докумен­те пробельных символов.

Для входящих документов сохраняющее множество состоит из имен всех элементов. То есть по умолчанию преобразования сохраняют все пробель­ные текстовые узлы. Для изменения сохраняющего множества элементов входящего документа используются элементы xsl:preserve-spaceиxsl:strip-space.

Эти элементы имеют следующий синтаксис:

<xsl:preserve-space

elements="имена"

/>

<xsl:strip-space

elements="имена"

/>

Элемент xsl:preserve-spaceдобавляет,axsl:strip-spaceудаляет имя элемента из сохраняющего множества входящего документа.

Обязательные атрибуты elementsэлементовxsl:strip-spaceиxsl:preserve-spaceсодержат либо значение"*", либо список имен, разделенных пробелами.

Значение "*"используется для выбора произвольных имен. Ему будут соответствовать любые имена элементов.

Имя в списке может быть либо именем элемента, либо иметь форму "префикс:*". В первом случае выбор будет производиться для всех элементов с заданным именем, например, для удаления пробельных символов в элементахdиcв преобразовании достаточно указать:

<xsl:strip-space elements="d c"/>.

Во втором случае будет производиться выбор всех элементов в данном пространстве имен. Например, если в документе определен префикс про­странства имен uprв виде атрибутаxmlns:upr="http://www.upr.com", проверке имени"upr:*"будут соответствовать все элементы пространства имен, определяемого идентификатором"http://www.upr.com".

Соседние файлы в папке Лабы