<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>
<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 можно использовать в шаблонах для применения правил, которые были импортированы во внешних модулях, но затем переопределены шаблонами основного преобразования.
Предположим, что в преобразованиях часто используется шаблон, который заменяет элементы 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.
<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.
