使用xsl:for-each和 xsl:template主要不同点是:一个是迭代(循环)函数,而另一个是递归的函数。本质上而言,这就意味着他们处理的方法有着根本上的区别。
用for-each,一次循环,元素会通过所选择的属性匹配一次,for-each循环开始和结束标签之间的指令会根据元素来处理。
而模板是不同的。当xsl:apply-templates被调用时,在不同的上下文中,每个与模板规则匹配的元素会作为节点提交给模板规则。那么,所有的模板中的指令会对节点进行处理。这个不同是微秒的,更重要的是结果通常是一样的。
通常建议XML的初学者避免使用for-each,因为它会导致不好的XSL实施,就像避免模板,错乱的代码和其他令人讨厌的XSL。取而代之的是,建议大多数开发者去学习如何正确地应用模板规则,因为它是XSL的真正的肥肉。
模板最明显的优点是:由于他们具有像子程序一样的行为,因此能被重用。它不仅使多次调用模板更容易,而且更加容易修改代码。当模板需要更新时,你就能一下子改变它。而当几个for-each需要更新时,你不得不手动更新每个部分。
模板也能帮助开发者创建更容易跟踪的分割代码。通过检查XSL的模板,可以更容易地弄清发生了什么,而不用再去关心for-each声明那样的具体内容了。
使用模板唯一不好的地方是:对于已经一定有经验的开发者来说学习模板没有for-each那么直观。