请您解释一下<xsl:apply-template>
和<xsl:call-template>
之间的差异以及我应该在什么时候使用<xsl:call-template>
?
谢谢<xsl:apply-template>和<xsl:call-template>之间的区别?
回答
在一个非常基本的水平,你使用<xsl:apply-templates>
当你想自动让处理器处理节点,并使用<xsl:call-template/>
当你想在加工更精细的控制。所以,如果您有:
<foo>
<boo>World</boo>
<bar>Hello</bar>
</foo>
而且你有以下XSLT:
<xsl:template match="foo">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="bar">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="boo">
<xsl:value-of select="."/>
</xsl:template>
你会得到的结果WorldHello
。从本质上讲,你已经说过了“处理这种方式吧”,然后让XSLT处理器在处理这些节点时处理这些节点。在大多数情况下,这就是您应该如何在XSLT中做的事情。
虽然有时候,你想做些更有趣的事情。在这种情况下,您可以创建一个不匹配任何特定节点的特殊模板。例如:
<xsl:template name="print-hello-world">
<xsl:value-of select="concat(bar, ' ' , boo)" />
</xsl:template>
然后你可以调用这个模板,而你正在处理<foo>
而不是自动处理foo
的子节点:
<xsl:template match="foo">
<xsl:call-template name="print-hello-world"/>
</xsl:template>
在这个特定的人为例子,你现在得到“ Hello World“,因为你已经覆盖默认的处理来做你自己的事情。
希望有所帮助。
请你解释我
<xsl:apply-template>
和<xsl:call-template>
,当我应该使用<xsl:call-template>
之间的区别?
一个可以使用<xsl:call-template>
但几乎从未应该。
它是XSLT的精神,让XSLT处理器,以确定到底是哪模板最佳匹配一个节点,来决定使用这个模板,用于处理节点。这给了我们干净,简单而强大的可扩展性和多态性。
通常,比较xsl:apply-templates
到xsl:call-template
与将虚拟方法从基类的调用与直接调用非虚方法的方法进行比较相似。
这里有一些重要的区别:
xsl:apply-templates
也更加丰富,比xsl:call-templates
,甚至从xsl:for-each
,更深只是因为我们不知道什么代码将的节点上应用 的选择 - 在一般情况下,该代码将与节点列表的不同节点 不同。将应用于 可写的方式
xsl:apply-templates
写后由 人不知道原作者的代码。
的FXSL library的实现在XSLT高阶函数(HOF)是不可能的,如果 XSLT没有足够的<xsl:apply-templates>
指令。
摘要:模板和<xsl:apply-templates>
指令是XSLT如何实现和处理多态性。人们可以也应该避免使用xsl:call-template
,它不允许多态性,并限制了可重用性和灵活性。
参考:看到这个整个主题:http://www.stylusstudio.com/xsllist/200411/post60540.html
- 1. Rails:<%=和<%==之间的区别?
- 2. <?php和<?之间的区别
- 3. Ruby中+和<<之间的区别
- 4. <%! %>与<% %>之间的区别
- 5. <stdafx.h>和“stdafx.h”之间的区别
- 6. python:!=和<>之间的区别?
- 7. <s:Line>和graphics.lineTo()之间的区别
- 8. 类和类之间的区别<?>
- 9. #include <...>和#include“...”之间的区别?
- 10. 在ASP.NET WebForms中,<%:, <%=和<%#之间有什么区别?
- 11. `<%#`和`<%=`和一个asp.net ascx文件之间的区别?
- 12. WSDL中的<types>和<message>之间的区别
- 13. Java中的类<?>和类<Object>之间的区别
- 14. <SomeName()>和VB.NET中的<SomeNameAttribute()>之间的区别
- 15. 区别</html:html>之间<html:html><html></html>
- 16. (1 << 32)和(1 << i)之间的区别其中i == 32
- 17. ArrayList <String>和ArrayList <>之间的区别?
- 18. Symfony在<ModelName> .class.php和<ModelName>之间的区别Table.class.php
- 19. System.Collections.Generic.List之间的区别<T> .ToArray()和System.Linq.Enumerable.ToArray <T>()?
- 20. Ruby - Array#<<和Array#push之间的区别
- 21. <objectAnimator>和ValueAnimator又名<animator>之间的区别?
- 22. <tiles:add>和<tiles:put> struts之间的区别是什么?
- 23. HashMap <String,String>和List <NameValuePair之间的区别
- 24. jsp表达式标记之间的区别<%和<%=
- 25. ArrayList <>()和ArrayList <>(){}之间的区别
- 26. 列表<T>和列表<object>之间的区别?
- 27. PredicateBuilder <True>和PredicateBuilder <False>之间的区别?
- 28. 将html与ruby混合时,“<%=”和“<%”之间的区别?
- 29. <%form ..和<%=表格之间的区别
- 30. “Convert.ToString(Nullable <int>)”和“Nullable <int> .ToString()”之间的区别?
到目前为止,这是我在XSLT读过(虽然我要补充一句,XSLT的最好解释是不是我的事,可能永远不会。将会) –