請您解釋一下<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的最好解釋是不是我的事,可能永遠不會。將會) –