Книга: Технология XSLT

Элемент xsl:fallback

Элемент xsl:fallback

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

<xsl:fallback>
 <!-- Содержимое: шаблон -->
</xsl:fallback>

Элемент xsl:fallback включается в "критическую" инструкцию, то есть в элемент, который может быть неизвестен процессору. В случае, если критическая инструкция отрабатывается нормально, содержимое xsl:fallback попросту игнорируется. Иначе, если процессор в силу некоторых причин не может выполнить критическую инструкцию, вместо нее он будет выполнять содержимое дочернего элемента xsl:fallback.

Пример

На тот случай, если процессор не сможет выполнить наш элемент расширения ext:date, мы можем "подстраховать" его следующим образом:

<ext:date pattern="HH:mm">
 <xsl:fallback>unknown time</xsl:fallback>
</ext:date>

В этом случае шаблон

<xsl:template match="/">
 <!-- ... -->
 <p>This page was generated at <ext:date pattern="HH:yy">
  <xsl:fallback>unknown time</xsl:fallback>
 </ext:date>.</p>
</xsl:template>

в случае невозможности выполнить ext:date выведет

<p>This page was generated at unknown time.</p>

Заметим, что xsl:fallback применим не только для обработки исключительных ситуаций, связанных с элементами расширения. Наборы доступных процессору элементов XSLT будут также меняться от версии к версии, и xsl:fallback вполне пригодится для обеспечения обратной совместимости. Например, если в версии XSLT 2.0 будет определен элемент xsl:for-each-group, то xsl:fallback можно использовать при создании альтернативного варианта для процессоров, которые еще не поддерживают новую версию:

<xsl:for-each-group select="item" group-by="@number">
 <!-- ... -->
 <xsl:fallback>
  <xsl:for-each select="item[generate-id(.)=
   generate-id(key('item', @number))]">
   <!-- ... -->
  </xsl:for-each>
 </xsl:fallback>
</xsl:for-each>

Оглавление книги


Генерация: 1.524. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз