паттернов.
| Вид паттерна | Приоритет |
|---|---|
| 0 |
child:: | |
@ | |
attribute:: | |
processing-instruction( | |
child::processing-instruction( | |
| -0.25 |
child:: | |
@ | |
attribute:: | |
| -0.5 |
child:: | |
@ | |
attribute:: | |
| Другие паттерны | 0.5 |
Несмотря на то, что вычислением приоритета преобразований занимается процессор, полезно понимать механизм этого вычисления для того, чтобы уметь предсказывать, как будет решен конфликт тех или иных шаблонов. Довольно часто в преобразованиях допускаются ошибки, связанные с приоритетом применения шаблонов.
Вычислим в качестве упражнения приоритеты шаблонов для следующего примера.
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:a='a'>
<xsl:strip-space elements='*'/>
<!-- Первый шаблон -->
<xsl:template match='a:b'>
<xsl:message>
<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>
