Применяется только один шаблон XSL из двух, которые соответствуют друг другу, что не так? - PullRequest
2 голосов
/ 18 января 2012

У меня есть таблица стилей xsl, которая содержит следующие шаблоны, с которыми я столкнулся с проблемой:

<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>
<!-- This is the 'parent' matching template that applies two specific templates -->
<xsl:template match="*[starts-with(name(), 'my-element')]">
    <xsl:apply-templates select="." mode="mode1"/> = <xsl:apply-templates select="." mode="mode2"/>
</xsl:template>

<!-- This one gets matched and applied from the parent template above -->
<xsl:template match="my-element" mode="mode1">
    ...
</xsl:template>

<!-- And so does this one -->
<xsl:template match="my-element" mode="mode2">
    ...
</xsl:template>

<!-- But then there's also this template that does not get matched -->
<!-- from the parent -->
<xsl:template match="some-element|my-element" mode="mode2">
    ...
</xsl:template>

Это нормально, что последний шаблон (some-element | my-element) не совпадает, например, потому что уже есть другой (my-element), который имеет такой же режим (mode2)?

Я протестировал это с Xalan и Visual Studio 2010 (внутри отладчика), они оба ведут себя одинаково (то есть не рассматривают самый последний шаблон как соответствующий).

Ответы [ 2 ]

0 голосов
/ 18 января 2012

При наличии более одного совпадающего шаблона процессор XSLT решает, какой шаблон выбрать для выполнения, следуя правилам, описанным в спецификации W3C XSLT 1.0 .

Выбран и выполнен только один шаблон .

Можно использовать <xsl:apply-imports> для вызова переопределенного правила шаблона в импортированной таблице стилей.

Кроме того, в XSLT 2.0 из выбранного шаблона можно применить шаблон «следующий лучший», используя инструкцию <xsl:next-match>.

0 голосов
/ 18 января 2012

Почему да, это совершенно нормально. См. 5.5 Разрешение конфликтов для правил шаблона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...