На самом базовом уровне вы используете <xsl:apply-templates>
, когда вы хотите, чтобы процессор автоматически обрабатывал узлы, и вы используете <xsl:call-template/>
, когда вы хотите более точный контроль над обработкой.Так что если у вас есть:
<foo>
<boo>World</boo>
<bar>Hello</bar>
</foo>
И у вас есть следующий XSLT:
<xsl:template match="foo">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="bar">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="boo">
<xsl:value-of select="."/>
</xsl:template>
Вы получите результат WorldHello
.По сути, вы сказали «обрабатывать такт и ускориться», а затем позволили процессору XSLT обрабатывать эти узлы, когда они сталкиваются с ними.В большинстве случаев именно так вы должны поступать в XSLT.
Иногда, тем не менее, вы хотите сделать что-то более изощренное.В этом случае вы можете создать специальный шаблон, который не соответствует ни одному конкретному узлу.Например:
<xsl:template name="print-hello-world">
<xsl:value-of select="concat( bar, ' ' , boo )" />
</xsl:template>
И затем вы можете вызывать этот шаблон во время обработки <foo>
вместо автоматической обработки дочерних узлов foo
:
<xsl:template match="foo">
<xsl:call-template name="print-hello-world"/>
</xsl:template>
В этомВ конкретном искусственном примере вы теперь получаете «Hello World», потому что вы переопределили обработку по умолчанию, чтобы делать свое дело.
Надеюсь, это поможет.