<script type="text/javascript"> google_ad_client = "pub-5033576919944123"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text_image"; //2007-10-24: csdn.blog google_ad_channel = "8548491739"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
技巧: 用節點集計數 | 英文原文 |
|||
使用 XSLT 節點集的特殊特性使事情變得更加容易通過使用節點集操作的特殊特性,可以使許多常見的 XSLT 任務(包括簡單循環)變得更容易。本技巧文章討論將節點集用於簡單和有效的循環控制。 和所有編程語言一樣,着手瞭解 XSLT 的內置數據類型和結構對掌握該語言來說是最基本的。節點集是 XPath 的數據類型中最有趣的事物(它們形成了 XSLT 的數據類型的基礎)。在本文中,我將演示兩種不是顯而易見的方法,使您可以用節點集來簡化 XSLT 處理。 傳統 XSLT 中的計數循環
如果您不熟悉這一技術,請立刻找一本好的 XSLT 教程或書籍,以瞭解這種遞歸模板是如何工作的。這是 XSLT 中最基本的技術之一。即使本技巧文章只提供了一個不常見到的變通方法,您仍然可以在使用 XSLT 時做到八、九不離十,而無需具有在睡夢中還能背誦這幾段代碼的本領。 該模板只用了一個參數,即要計數並打印的星號數目。當最初調用該模板時,傳入打印星號的總數。在該腳本中,有關錯誤檢查,我寫得很簡單。例如,如果您給 性能是這種方法的最大問題。這種原始形態的遞歸會佔據許多資源。大多數 XSLT 處理器認爲它是一種最差的遞歸方式示例,可以將它優化成一個常規的迭代。這很有用,但如果它每次都經歷模板分派機制,那麼甚至這樣的迭代也會變慢。或許到目前爲止某些 XSLT 處理器甚至有更復雜的優化器,可以消除這一開銷,但我還不指望這類先進技術。通常,當遞歸中的每一步都是一個細小操作(如打印一個星號)時,開銷會是一個問題。 節點集訣竅
從源節點集,謂詞創建另一個正好有 通過使用這些訣竅,您可以將打印星號的模板重新編寫成: 清單 2. 將定製的節點集用於循環
樣式表中所有節點的節點集都是在頂層一次性構造的,並且對於轉換中任何這種循環可以重用這些節點集。該模板首先檢查是否有足夠多的節點用於迭代,如果沒有,則中止所有處理。雖然您可以選擇更完美的錯誤處理,但請不要省略該檢查,否則可能要求一定數量的迭代,沒有任何警告以較少的迭代數目告終。這類錯誤就很難發現。 另一個可能的缺點是:對於某些 XSLT 實現, 結束語
|
<script type="text/javascript"> google_ad_client = "pub-5033576919944123"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text_image"; //2007-10-24: csdn.blog google_ad_channel = "8548491739"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>