現對該模板進行詳細說 明。在這個模板中有兩個xsl:template,也就定義了兩個子模板,其中第一個直接使用match 命中XML文檔的根節點,而第二個xsl:template創建一個名為table的子模板。按照面向過程 的軟件開發思想,第一個模板就是主函數,而第二個模板就定義了一個名為table的函數,主 函數內部調用了這個子函數。
在主模板中,首先是用XPath路徑//Table來查找XML文 檔中所有的名為Table的節點。在XPath中使用兩個斜線表示查找XML文檔中的當前節點下的所 有子孫節點。對於查到的每個Table元素都是用xsl:call-template來調用名為table的子模板 。這很類似C語言中主函數調用子函數一樣。
XSLT轉換過程進入的了table的子模板中 ,首先輸出DIV,輸出一些數據表的說明文字。這裡還是用count( Fields/FIEld [PrimaryKey='true']) > 0 來判斷該表是否有關鍵字段,若有關鍵字段則輸出 關鍵字段的名稱。
然後輸出table標簽,輸出第一行表格,然後查找遍歷所有的字段 元素,對每一個字段XML元素,首先輸出tr標簽,這裡還是用了xsl:attribute元素來設置TR 元素的屬性值。這裡用了name屬性來指明輸出的是tr元素的名為bgcolor的屬性值,也就是表 格行的背景色。裡面是用 xsl:if 來輸出該屬性值的內容,這裡的判斷條件是 position() mod 2 = 0 ,position()函數返回從1開始的當前節點的序號,mod 表示數學取模運算,因此 若當前節點的序號是二的倍數則輸出其內容,也就是#eeeeee ,這是一個淺灰色的顏色值。 這樣我們就可以讓表格行每隔一行就設置bgcolor屬性為#eeeeee,實現了表格行的顏色交替 變化。
然後我們開始輸出單元格,第一個單元格輸出字段名,這裡我們又是用了 xsl:attribute,使得若字段為關鍵字段則使用紅色顯示字段名稱。剩下的欄目則原樣輸出。
這樣我們定義了兩個子模板來輸出Html代碼,能顯示一個或全部的數據表的字段定義 信息。
其實我們可以將兩個子模板合並為一個模板,將子模板的XSLT代碼復制到主模 板的xsl:for-each裡面,也也能用一個模板來輸出一個或全部的數據表的代碼。
類似 的在模板_sql.語句.xslt也定義了兩個模板,使得能輸出一個或全部數據表的SQL語句。
從這些例子可以看出,XSLT代碼有點類似面向過程的編程語言。其中有邏輯判斷,循 環,條件開關列表,主函數,子函數,可以說是用XML來書寫的程序代碼。XSLT只能根據另外 一個XML文件輸出純文本文檔。
運行程序
大家獲得程序源代碼後,設置虛擬目錄 ,並設置安全權限,使得程序能讀取程序目錄下的文件,也不用作其它配置即可運行。部屬 完畢後我們就可以在浏覽器中查看這個代碼生成器的運行結果了。
用戶界面中列出了 演示數據庫中所有的數據表名稱,並列出了可用的模板名。大家可以選擇某個數據表名或整 個數據庫,然後再選擇某個模板,點擊“創建代碼”按鈕,即可在按鈕下面看到 生成的以Html方式顯示的自動生成的文檔。
大家可以仿造已有的XSLT模板編制自己的 代碼生成模板,保存的文件名以下劃線開頭,XSLT為擴展名。放置到程序目錄下,點擊 “刷新系統”按鈕就可使用剛剛添加的代碼生成模板。這也算做是一種熱拔插系 統了。
本代碼生成器的特點是程序代碼是少量的,功能是強大的,配置是靈活的,移 植也是簡單的。由於核心是采用XSLT的,因此很容易翻譯到Java,VB.Net,PHP等其它B/S程 序。添加和刪除模板的操作也是很簡單的。大家可以根據各自需要,將這個代碼生成器進行 一些擴展即可投入實際運用了。
小結
在本課程中,我們使用了C#和XSLT技術開發 了一個可投入實際運用的代碼生成器了。該代碼生成器結構簡單,功能強大。使我們更深入 的發現了XSLT技術的威力。建議大家以後多多學習多多應用.