XSL学习笔记6 XSLT内置模板规则
 
定义正确的模板规则来匹配XML树中的节点是XSLT应用的关键。为了让源文档树的节点在没有明确匹配规则的情况下,能够被递归处理,XSLT定义了几个内置的模板规则,可以将其看作是XSL式样表文档的默认模板规则。
 
内置模板规则就好像是在式样表之前被隐含地导入的一样,与所有其他的模板规则相比,内置模板规则具有较低的导入优先级。因此,可以通过在样式表文档中包含一个显式的模板规则来覆盖内置模板规则。
 
内置模板有如下几个:
 
1、应用所有的元素节点和根节点
<xsl:template match="*|/">
 <xsl:apply-templates/>
<xsl:tempalte>
 
注意:如果不想应用内置的模板规则,只要显式的为某个元素定义模板规则即可,这样就覆盖了内置的模板规则。不过要注意的是,除非在匹配模板规则的模板中调用了<xsl:apply-templates/>,否则对于该元素的所有子元素,默认模板规则不再起作用。
 
2、应用所有的元素节点和根节点,针对的是具有mode属性的<xsl:apply-template/>元素
<xsl:template match="*|/" mode="m">
 <xsl:apply-templates mode="m"/>
<xsl:tempalte>
 
当在式样表文档中,使用了具有mode属性的<xsl:apply-templates>元素,那么XSLT处理器就会自动加入这样一条模板规则:将<xsl:tempalte>元素的mode属性值设置为<xsl:apply-templates>元素的mode属性的值。
 
3、应用雨文本和属性节点,在结果树中输出文本和属性节点的值,如下所示:
<xsl:template match="text()|@*">
 <xsl:apply-templates select = "."/>
<xsl:tempalte>
 
因为有了第一条和第三条内置模板规则,所以即使在样式表中没有编写任何的模板规则,仍然会有元素文本内容(作为文本节点)输出。不过要注意的是,如果没有对属性节点应用<xsl:apply-templates>元素,那么这条模板规则对属性是不会起作用的。
 
4、应用于处理指令和注释,如下所示:
<xsl:template mach="processing-instruction()|comment()"/>
这表规则对处理指令和注释节点没有做任何处理,意味着在结果树中不会输出源文档树中的处理指令和注释的任何信息。
 
另外,在XSLT中,应用于名称空间节点的内置模板规则也是什么都不做,也没有任何的模板可以匹配名称空间节点。