XSLT 1.0 Несколько блоков сопоставления шаблонов - PullRequest
1 голос
/ 06 мая 2020

В некоторых файлах xslt я встречал несколько блоков соответствия шаблонов. Для этого есть причина?

<xsl:template match="/">
    <xsl:apply-templates select="/ns0:MyRoot" />
</xsl:template>

<xsl:template match="/ns0:MyRoot">
.. // do stuff
</xsl:template>

Обновление: Удален 2-й вопрос

1 Ответ

2 голосов
/ 06 мая 2020

В вашем примере нет веских причин для использования 1-го шаблона, потому что он не делает ничего, что в любом случае не было бы сделано встроенным шаблоном :

<xsl:template match="*|/">
  <xsl:apply-templates/>
</xsl:template>

(кроме случаев, когда целью является предотвращение обработки документов XML, элемент root которых не ns0:MyRoot).

Однако в целом есть очень хорошие причины иметь несколько шаблонов из-за способа работы XSLT-обработки . Во многих случаях удобно применять шаблоны к нескольким узлам, и позволить процессору найти наиболее подходящий шаблон для каждого узла. Это позволяет вам инкапсулировать код для обработки каждого типа узла и избегать сложных условных операторов.

OTOH, нужно сказать, что слишком часто несколько шаблонов используются без уважительной причины, что приводит к GOTO синдром .

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