考察xsl:for-each和xsl:template的不同

ZDNet软件频道 时间:2003-04-08 作者:翻译:Java研究组织-barney |  我要评论()
本文关键词:
有时候,XML程序员开发XSL转换工具时, 会面对很难做决定的局面。是否用xsl:for-each取代xsl:template,如果是,那么什么时候呢?
本文译自Builder.com有时候,XML程序员开发XSL转换工具时, 会面对很难做决定的局面。是否用xsl:for-each取代xsl:template,如果是,那么什么时候呢?让我们围绕这个话题考察一些情况,很有可能就可以找到一个在实践中被接受的而又更加清晰的方法。

主要不同点:

使用xsl:for-eachxsl:template主要不同点是:一个是迭代(循环)函数,而另一个是递归的函数。本质上而言,这就意味着他们处理的方法有着根本上的区别。

用for-each,一次循环,元素会通过所选择的属性匹配一次,for-each循环开始和结束标签之间的指令会根据元素来处理。

而模板是不同的。当xsl:apply-templates被调用时,在不同的上下文中,每个与模板规则匹配的元素会作为节点提交给模板规则。那么,所有的模板中的指令会对节点进行处理。这个不同是微秒的,更重要的是结果通常是一样的。

XSL模板:

通常建议XML的初学者避免使用for-each,因为它会导致不好的XSL实施,就像避免模板,错乱的代码和其他令人讨厌的XSL。取而代之的是,建议大多数开发者去学习如何正确地应用模板规则,因为它是XSL的真正的肥肉。

模板最明显的优点是:由于他们具有像子程序一样的行为,因此能被重用。它不仅使多次调用模板更容易,而且更加容易修改代码。当模板需要更新时,你就能一下子改变它。而当几个for-each需要更新时,你不得不手动更新每个部分。

模板也能帮助开发者创建更容易跟踪的分割代码。通过检查XSL的模板,可以更容易地弄清发生了什么,而不用再去关心for-each声明那样的具体内容了。

使用模板唯一不好的地方是:对于已经一定有经验的开发者来说学习模板没有for-each那么直观。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134