<xsl:text>1</xsl:text>

   <xsl:call-template name='print-name'/>

  </xsl:message>

  <xsl:apply-templates/>

 </xsl:template>

 <xsl:template match='a:a/a:b'>

  <xsl:message>

   <xsl:text>2</xsl:text>

   <xsl:call-template name='print-name'/>

  </xsl:message>

  <xsl:apply-templates/>

 </xsl:template>

 <xsl:template match='a:*'>

  <xsl:message>

   <xsl:text>3</xsl:text>

   <xsl:call-template name='print-name'/>

  </xsl :message>

  <xsl:apply-templates/>

 </xsl:template>

 <xsl:template match='b'>

  <xsl:message>

   <xsl:text>5</xsl:text>

   <xsl:call-template name='print-name'/>

  </xsl:message>

  <xsl:apply-templates/>

 </xsl:template>

</xsl:stylesheet>

Листинг 5.17. Преобразование b.xsl

<xsl:stylesheet

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

 version='1.0'

 xmlns:a='a'>

 <xsl:strip-space elements='*'/>

 <xsl:template match='node()' priority='1'>

  <xsl:message>

   <xsl:text>4</xsl:text>

   <xsl:call-template name='print-name'/>

  </xsl:message>

  <xsl:apply-templates/>

 </xsl:template>

 <xsl:template name='print-name'>

  <xsl:text> template matched </xsl:text>

  <xsl:value-of select='name()'/>

  <xsl:text>.</xsl:text>

 </xsl:template>

</xsl:stylesheet>

Как уже было сказано ранее, четвертое преобразование, вынесенное теперь в импортируемый модуль, при разрешении конфликтов шаблонов будет самым младшим вследствие того, что порядок его импорта меньше, чем у других преобразований. Сообщения процессора будут иметь вид

4 template matched ORA.

5 template matched b.

3 template matched a.

2 template matched b.

1 template matched b.

3 template matched c.

Кстати сказать, XSLT предоставляет возможность выполнять в преобразованиях импортированные шаблоны вместо тех, которые, по мнению процессора, лучше подходят. Подобно тому, как для применения шаблонных правил мы использовали элемент xsl:apply-templates, импортированные шаблоны могут быть вызваны элементом xsl:apply-imports.

Элемент xsl:apply-imports

Синтаксис этого элемента:

<xsl:apply-imports/>

Элемент xsl:apply-imports можно использовать в шаблонах для применения правил, которые были импортированы во внешних модулях, но затем переопределены шаблонами основного преобразования.

Пример

Предположим, что в преобразованиях часто используется шаблон, который заменяет элементы home ссылками на сайт http://www.xsltdev.ru:

<xsl:template match='home'>

 <а href='http://www.xsltdev.ru'>www.xsltdev.ru</a>

</xsl:template>

При необходимости этот шаблон может быть переопределен. К примеру, ссылка может выглядеть как

Visit <а href='http://www.xsltdev.ru'>www.xsltdev.ru</a>

Соответственно, шаблон будет иметь вид

<xsl:template match='home'>

 <xsl:text>Visit </xsl:text>

 <a href='http://www.xsltdev.ru'>www.xsltdev.ru</a>

</xsl:template>

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

Листинг 5.18. Преобразование home.xml

<xsl:stylesheet version='1.0'

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

 <xsl:template match='home'>

  <a href='http://www.xsltdev.ru'>www.xsltdev.ru</a>

 </xsl:template>

</xsl:stylesheet>

Для того чтобы использовать внешний шаблон, основное преобразование должно импортировать его при помощи xsl:import и применять посредством xsl:apply-imports.

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

0

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

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