<xsl:template> 元素
定义一个可再次使用的模板,用于为特定类型和上下文的节点生成所需的输出。
<xsl:template
name= Qname
match = Pattern
priority = number
mode = QName
</xsl:template>
特性
name
要展开的限定名。如果有前缀,前缀将使用出现名称的属性上的有效命名空间声明展开为统一资源标识符 (URI) 引用。扩展名称由名称的本地部分以及可能的空 URI 引用组成,作为模板的名称。没有前缀的名称不使用默认的命名空间。如果 <xsl:template> 元素有 name 属性,可以(但是不需要)同时有 match 属性。match
标识应用规则的源节点的模式。match 属性是必选项,除非 <xsl:template> 元素有 name 属性。<xsl:template> 元素的内容是在应用模板规则时实例化的模板。priority
模板的优先级编号。不考虑所有优先级低于最高优先级的匹配模板规则。此属性的值必须是 0–9 的实数,正数负数都可以,将包含可选的前导减号 (-) 的生成编号匹配。默认的优先级如下所示进行计算:如果模式包含通过 | 分隔的多个替换项,处理时相当于一组模板规则,每个替换项代表一个模板规则。
如果模式的格式为 Qname 前面有一个子级或属性轴指定符,或处理指令文本前面有一个子级或属性轴指定符,则优先级为 0。
如果模式是名称前面有一个子级或属性轴指定符,则优先级为 -0.25。
否则,如果模式只是节点测试前面有一个子级或属性轴指定符,则优先级为 -0.5。
否则,优先级为 0.5。
因此,最常见的模式(对特定类型且具有特定扩展名称的节点进行测试的模式)的优先级为 0。明确性差一些的模式(对特定类型且具有包含特定命名空间 URI 的特定扩展名称的节点进行测试的模式)的优先级为 -0.25。明确性更差一些的模式(只测试是否有特定类型的节点的模式)的优先级为 -0.5。比最常见模式明确性更强的模式的优先级为 0.5。
mode
模式值。此值允许多次处理某个元素,每次产生不同的结果。如果 <xsl:template> 没有 match 属性,就不得有 mode 属性。如果 <xsl:apply-templates> 元素有 mode 属性,则只应用于 mode 属性值相同的 <xsl:template> 元素中的模板规则;如果 <xsl:apply-templates> 元素没有 mode 属性,则只应用于没有 mode 属性的 <xsl:template> 元素中的模板规则。
元素信息
注释
注意,模板不需要生成完整的 XML 文档(甚至是根模板,除非使用 transformNodeToObject),而只是生成 XML 的一部分。可以包含由模板定义的未封闭文本或多个文档元素。这样便于生成原始文本和 XML 片断,以便应用程序可以进一步处理(例如 HTML 片断插入 HTML 页)。
name 属性的值为展开的 QName。如果有前缀,前缀将使用出现名称的属性上的有效命名空间声明展开为 URI 引用。扩展名称由名称的本地部分以及可能的空 URI 引用组成,作为模板的名称。没有前缀的名称不使用默认的命名空间。
如果 <xsl:template> 元素有 name 属性,可以(但是不需要)同时有 match 属性。<xsl:call-template> 元素按名称调用模板;必须有 name 属性,用于标识要调用的模板。与 <xsl:apply-templates> 不同,<xsl:call-template> 不会更改当前节点或当前节点列表。
如果样式表包含多个同名模板,将出错。
示例
该模板规则含有一种模式,该模式标识 <stock> 元素并生成带有 STYLE="font-weight:bold" 属性的输出 <DIV> 元素:
XML 文件 (portfolio.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="templ.xsl"?>
<portfolio xmlns:dt="urn:schemas-microsoft-com:datatypes" xml:space="preserve">
<stock exchange="nyse">
<name>zacx corp</name>
<symbol>ZCXM</symbol>
<price dt:dt="number">28.875</price>
</stock>
<stock exchange="nasdaq">
<name>zaffymat inc</name>
<symbol>ZFFX</symbol>
<price dt:dt="number">92.250</price>
</stock>
<stock exchange="nasdaq">
<name>zysmergy inc</name>
<symbol>ZYSZ</symbol>
<price dt:dt="number">20.313</price>
</stock>
</portfolio>
XSLT 文件 (templ.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="stock">
<DIV STYLE="font-weight:bold">
Symbol: <xsl:value-of select="symbol" />,
Price: <xsl:value-of select="price" />
</DIV>
</xsl:template>
</xsl:stylesheet>
输出
以下是格式化输出:
Symbol: ZCXM, Price: 28.875
Symbol: ZFFX, Price: 92.250
Symbol: ZYSZ, Price: 20.313