XSL基于模板。
XML 数据可以在三个级别上“重用”。在最基本的层面上,您可以<xsl:for-each />
通过 XML。
注意:XSL 中的 for-each 不是循环遍历数据,它只是匹配数据。同样,当您的“内部”为每个您的内部 XML 的“上下文”时(这就像编程中的“范围”概念)
使用和重用 for-each 的示例
<xsl:for-each select="/xml/data/here">
... do some stuff ...
</xsl:for-each>
<xsl:for-each select="/xml/data/here">
... do some DIFFERENT stuff ...
</xsl:for-each>
for-each 节点包含在模板节点中(第二级重用)。有两种类型的模板节点:匹配和命名。匹配模板节点,作用类似于上面提到的 for-each 节点,但如果在 XSL 处理开始时匹配到任何节点,模板引擎会自动调用该节点。匹配模板节点也可以显式应用。另一方面,命名模板节点总是被显式应用,并且可以被认为是类似的函数。
将始终调用的匹配模板示例(因为根节点将始终存在)
<xsl:template match="/">
... do some stuff ...
</xsl:template>
一个匹配模板显式调用另一个匹配模板
<xsl:template match="/">
<xsl:apply-templates select="xml/data/too" />
</xsl:template>
<xsl:template match="xml/data/too">
... do something ...
</xsl:template>
注意:为了使匹配模板工作,它匹配的 XML 节点需要存在。如果不匹配,则不调用该模板。
命名模板示例
<xsl:template name="WriteOut">
... data with NO Context Here ...
</xsl:template>
或从匹配的模板调用命名模板
<xsl:template match="/">
<xsl:call-template name="WriteOut" />
<xsl:template>
注意:你可以在调用匹配和命名模板的地方混合和匹配,你只需要注意你所处的上下文。
所有模板节点都保存在XSL Stylesheets中,您可以包含和导入各种样式表。例如,您可以将处理 HTML 标头节点的所有模板保存在一个模板中,并将处理 HTML 正文节点的所有模板保存在另一个模板中。然后,您可以创建一个包含 Header 和 Body 样式表的样式表。
包含节点的示例
<xsl:include href="header.xsl" />
总之,有三种方法可以抽象数据块,通过 for-eaching、通过模板或通过包含样式表。