Рассмотрим этот XML:
<people>
<person>
<firstName>Deane</firstName>
<lastName>Barker</lastName>
</person>
</people>
Что если два шаблона XSLT соответствуют элементу через разные XPath ? Я знаю, что если элемент «match» в двух шаблонах идентичен (что никогда не должно происходить, я не думаю), шаблон last сработает.
Однако рассмотрим этот XSL:
<xsl:template match="person/firstName">
Template #1
</xsl:template>
<xsl:template match="firstName">
Template #2
</xsl:template>
Элемент "firstName" будет совпадать в любом из этих шаблонов - первый как дочерний элемент "person", а второй автономный.
Я проверил это, и шаблон № 1 выполняется, а шаблон № 2 - нет. Каков принцип действия этого? Я могу думать о трех вещах:
- Специфика XPath (весьма сомнительно)
- Местоположение в файле XSLT (также сомнительно)
- Некоторая перестановка шаблона № 2 шаблоном № 1. Во время выполнения шаблона № 1 происходит что-то, что указывает на то, что шаблон № 2 не должен выполняться.