我有幾個模板可以匹配xml文檔中的各種節點。如果我只做
< xsl:apply-templates /> 它以某種方式遞歸地輸出下面所有節點的文本。我只是想讓它遞歸匹配我定義的任何模板。我怎麼做 ?xsl:apply-templates如何才能匹配我已定義的模板?
回答
發生這種情況,因爲XSLT中內置模板的 。 XSLT有 夫婦的內置模板, 說:
當你申請模板元素
- ,處理其子元素
- 當你申請模板文本節點,賦予其價值
總之,這意味着如果你申請 模板元素,但沒有 該元素一個明確的模板,然後 其內容被處理並最終 你最終與文本 該元素包含。
閱讀完整的解釋:http://www.dpawson.co.uk/xsl/sect2/defaultrule.html
您可以通過定義自己的模板替換爲文本節點的默認模板,並將它什麼也不做。
<xsl:template match="text()" />
,你可以設定一個模式,僅適用於自己的模板:
<xsl:template match="* | /" >
<xsl:apply-templates mode="myMode" />
</xsl:template>
<xsl:template match="somenode" mode="myMode">
<!-- do something here -->
</xsl:template>
另一種選擇是覆蓋內置的模板規則(例如見http://unix.com.ua/orelly/xml/xmlnut/ch08_07.htm)
這可能是經驗豐富的XSLT程序員遇到的最常見的問題。
觀察到的行爲正是XSLT兼容處理器應該如何運行的。
要考慮到:
<xsl:apply-templates/>
是一個縮寫:
<xsl:apply-templates select="child::node()"/>
和內置的存在模板規則。按照XSLT 1.0 Spec:
「5.8內置模板規則
有一個內置的模板規則允許遞歸處理由一個明確的模板規則在沒有成功的模式匹配的繼續在樣式表中,這個模板規則適用於元素節點和根節點。下面顯示了內置模板規則的當量:
<xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template>
還有一個內置的對於每個模式,它允許遞歸處理繼續在同一模式在沒有成功的圖案的模板規則在樣式表中通過明確的模板規則進行匹配。此模板規則適用於元素節點和根節點。以下顯示的是模式m的內置模板規則的等效值。
<xsl:template match="*|/" mode="m"> <xsl:apply-templates mode="m"/> </xsl:template>
還爲文本內置模板規則和屬性節點那份文本通過:
<xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template>
內置的處理指令的模板規則和意見是什麼也不做。
<xsl:template match="processing-instruction()|comment()"/>
命名空間節點的內置模板規則也是什麼也不做。沒有可以匹配命名空間節點的模式;因此,內置的模板規則是應用於命名空間節點的唯一模板規則。
內置的模板規則,好像他們是在之前的樣式表隱式地導入等具有較低的導入優先比其他所有的模板規則進行處理。 因此,筆者可以通過包括一個明確的模板規則 「
--- XSLT規格的報價最終覆蓋內置的模板規則 ---
所以,如果作者想成爲在XSLT處理的完全控制權,他們應該覆蓋所有內置模板。
例如,如果我們不希望text()
節點被複制到輸出做,我們可以使他們通過覆蓋內置忽視在模板中按以下方式:
<xsl:template match="text()" />
- 1. OpenCV模板匹配 - 如何確定匹配模板的角度
- 2. 模板定義如何與模板聲明相匹配?
- 3. 只有在模板匹配時才畫平方(模板匹配)
- 4. 我如何能匹配Django的模板從字典中的值
- 5. 模板匹配 - 如何指定或conditon
- 6. 模板類方法的特化。 「功能模板已經定義」
- 7. 我怎樣才能匹配的模式如下
- 8. 如何在XSL轉換中定義模板匹配?
- 9. 類模板已經定義
- 10. 如何定義模板類的模板
- 11. 模板匹配的OpenCV性能
- 12. regmatch_t我怎樣才能得到匹配?
- 13. 如何匹配前同胞的模板?
- 14. 我如何才能檢索匹配的孩子?
- 15. 找到的模板的模板功能否匹配
- 16. 我如何能匹配PHP
- 17. OpenCV模板匹配
- 18. OpenCV匹配模板
- 19. XSLT匹配模板
- 20. opencv,模板匹配
- 21. 帶模板匹配的模板
- 22. 已知的模式匹配
- 23. 模板化功能..錯誤:模板id不匹配任何模板聲明
- 24. 如何* .INL文件模板類中定義模板功能
- 25. C++:模板 - 無匹配功能調用
- 26. 如何實時進行模板匹配
- 27. 模板模式匹配
- 28. 我如何替換一些匹配的模板標籤在PHP
- 29. xsl:模板匹配找不到匹配
- 30. 給定數據模板名稱的匹配模板名稱
如果XSLT 2.0,並使用模板模式,它可能是有幫助的使用`的 `。否則,默認文本模板仍然適用,例如,如果您執行``。 –
Svish
2013-01-29 10:04:45