XSL的模板规则
<xsl:template>标签内的文本内容描述了转换结果的形式,称为输出模板。属性match的取值把模板规则与指定的元素或属性相比较,只有匹配的DOM节点才会被处理,其余的节点将被忽略。整个过程中最先匹配的是树的根节点,根节点用“/”表示:
<xsl:template match=“/”>
output template for root element
</xsl:template>
然后匹配其他节点,此时,只要在引号中指明要处理的元素对象名称即可。如果在引号中出现的是“*”,那么表示该规则适用于所有的未单独指定处理的元素节点。比如下例中的第二个模板就表示要处理除<Employee>元素之外的所有节点:
<xsl:template match=“Employee”>
output template
</xsl:template>
<xsl:template match=“*”>
output template
</xsl:template>
此外,XSL中还可以使用路径指示符来指定一些特殊位置的元素与模板相匹配。“//”代表任意深度位置,如<xsl:template match=“//Employee”>用来匹配文档中任何位置的<Employee>元素;而如果是<xsl:template match=“Employee//Name”>,则表明是匹配<Employee>元素的后继节点中所有<Name>元素。另外一个路径指示符是“/”,表示直接的父子节点关系。将刚才例子中的“//”换为“/”,就意味着匹配的是<Employee>元素子节点中的<Name>元素。
很显然,某些树节点在XSL中可能会对应多个模板,在这种情况下,只有最后一个对应模板会生效,前面的模板规则都会被XSL处理器忽略掉。
"/"是表示当前文档的节点,类似DOS目录分割符。例如:/PEOPLE表示选择根节点下的PEOPLE元素;PEOPLE/PERSON表示选择PEOPLE元素下所有的PESON子元素。
"//"则表示当前文档所有的节点。类似查看整个目录。例如://PEOPLE表示选择文档中所有的PEOPLE元素,无论它在什么层次;PEOPLE//PERSON表示在PEOPLE元素下所有的PERSON元素,无论它的层次多深。