C#調用WalkTree()方法
本文向大家介紹C#調用WalkTree()方法,可能好多人還不知道C#調用WalkTree()方法,沒有關系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
菜單應用程序使用了3個 XML 文檔:menuItems.xml、menuItems2.xml 和menuItems3.xml,它們用于標記單獨的菜單項目。XML的處理和操作由一個叫做xmlMenus.dll的集合完成,這個集合被服務器端的一個ASP.NET 文件createMenus.aspx所使用。在客戶端的動態HTML (DHTML)內容使用了一個層疊格式表文件和一個JavaScript文件,這些文件聯合在一起生成了本文開始部分的圖示結果。
我們在List 1的代碼顯示了用來標記單獨菜單項目的XML文檔的一部分。文檔中的主元素命名為menuItem,它可以包含一個名字和超級鏈接元素以及額外的menuItem 子元素。這種關系可以用來創建包含子菜單的菜單系統,就象Windows的開始菜單一樣。
由于 XML已經標出了分層關系,因此就可以利用循環在不同元素之間行走:當使用XmlDocument、XmlNode和XmlNodeList類創建子節點時,我們可以反復調用WalkTree() 函數以顛倒父/子關系。其它的類如 ArrayList和 StreamWriter用于將相關菜單歸類到數組中,然后在適當時間將所生成的菜單結構寫入一個文件中。
XmlMenus集合的代碼開始時要聲明一個XmlHierMenu 名稱空間,接下來要引用 System、 System.Xml、 System.Collections和System.IO 名稱空間:
- using System;
- using System.Xml;
- using System.Collections;
- using System.IO;
在這部分代碼之后要創建3個構造器。一個構造器不接收變量,只對變量進行初始化。下一個構造器接收一個圖象文件的定制路徑。最后一個構造器在不經常對XML菜單進行刷新的情況下,允許將由集合生成的輸出存儲到一個文件中。最后一個構造器所生成的文件可以被靜態地包含在一個 ASP.NET文件中,而不是在各個Web頁面請求時隨時地生成。
這個方法負責進行XML文檔的裝載和解析,找到根節點,然后在根的子節點之間循環。如果發現一個子節點本身還有子節點,就C#調用WalkTree()方法,并且把這些子節點都傳遞到其中。如果這些子節點還有子節點,就再次C#調用WalkTree()方法。這個過程循環進行直到不再發現增加的子節點。Walktree()方法的代碼可以參看List 3。
在C#調用WalkTree()方法并且對不同的節點進行分析的同時,要解析 menuItem節點,將來自其超級鏈接和名字節點的數據放在數組列表中。對整個 XML文檔都進行解析之后,數組列表的內容就被傳遞回調用的ASP.NET的頁面,然后使用Response對象寫出信息。從這時起,客戶端的 JavaScript代碼就開始控制DHTML 菜單了。
在服務器端,我們使用一個 ASP.NET頁面來開始菜單的創建過程。這個頁面輸入了與集合相關聯的名稱空間XmlHierMenu:
- <%@ page language="C#" %>
- <%@ Import Namespace="XmlHierMenu" %>
然后,將樣式表文件和 JavaScript文件包含在文件的 代碼區中。最后,在 ASP.NET 頁面底部的代碼用來引用上面提到的CreateMenu() 方法與WalkTree()方法。
在ASP.NET 頁面中所找到的C# 代碼只是建立了到不同的XML文檔的路徑,并且對 XmlMenu 類進行了例示。一旦對這個類進行了例示,就對 CreateMenu()方法進行調用。這個方法接收菜單名以及到這個菜單的XML文檔的文件路徑。在本例中,要創建3個名為menu1、 menu2和 menu3 的菜單,然后在一個ASP.NET頁面中使用。這個應用程序在一個給定頁面中可以支持無窮多的菜單,但是我們建議菜單數目不要過多,因為每增加一個菜單,發送到客戶端的文件規模都會增加。
【編輯推薦】