精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何使用C#與XML創建動態分層菜單

開發 后端
從在復雜的B2B交易中的交換數據到為應用程序提供配置文件結構,XML在許多方面大顯身手!由于XML不斷地獲得軟件的支持,我們完全能夠預見:XML的應用將不斷增加。本文就介紹這樣一種應用程序,它使用XML創建類似于Windows開始菜單的分層菜單系統,從而向終端用戶提供更滿意的Web體驗。

本文將介紹一種應用程序,它使用XML創建類似于Windows開始菜單的分層菜單系統,從而向終端用戶提供更滿意的Web體驗。

這個應用程序將使用 C#、XML和服務器端Microsoft .Net框架,創建一個 DHTML 結構,IE4 或更高版本的瀏覽器可以操作它并在客戶端動態顯示。由于我們可以快速地訪問服務器上的XML,并且XML能夠描述層次之間的關系,因此它成為標記“父/子菜單”數據的一個最佳選擇。

 
一個三層菜單系統

除了學習如何使用XML創建一個菜單應用程序外,我們還要介紹 .Net框架的主要 XML 類,它們位于 System.Xml 集合中。

什么是.Net集合(Assembly)

要在 C# 文件中使用XML,就必須引用一個特定的名稱空間。 .Net平臺中的一個名稱空間是作為一個程序組件的組織系統使用的,它對于解決命名沖突很重要,這一點很象 XML中的 名稱空間。這個基于 XML的菜單系統是用位于System.Xml集合中的System.Xml名稱空間創建的。.Net SDK 是這樣定義集合的:一個集合就是一個類型和資源的匯集信息,這些類和資源一起使用,形成一個功能的邏輯單元,即一個“邏輯”dll。

一個集合需要許多物理文件,如界面、類、資源文件等等,并且創建了關于文件如何一起工作的元數據。集合中還可能包含版本及安全信息。集合有許多好處,其中之一就是可以在ASP.NET應用程序中使用,而無須用regsvr32.exe向注冊文件中增加一個類識別號(CLSID)。這樣以來,集合的升級操作與將適當的集合復制到一個ASP.NET 應用程序的bin 目錄中一樣簡單。現在我們就來仔細看一看那些建立在System.Xml名稱空間和集合中的類。

如果你以前使用過Microsoft的 MSXML3分解器,就會發現使用System.Xml 集合中的類相當簡單。這里的菜單應用程序只使用了這些主要集合類中的一部分:XmlNode、 XmlDocument、 XmlNodeList、 XmlNamedNodeMap、 DocumentNavigator、 XmlTextReader和 XmlTextWriter。

XmlDocument、 XmlNodeList和XmlNode類用來創建傳遞給客戶端瀏覽器的菜單應用程序的結構。用XmlDocument類以一種安全線程(thread-safe)的方式從服務器上裝載和分解本地或遠程XML 文檔。建立在一個字符串中的 XML標記也可以被裝載或分解,從而在一個文檔中創建、移動節點或取消節點的移動。XmlNodeList 類可以使我們列舉一個節點的集合來訪問一個特定屬性,如名稱、值或名稱空間。最后,XmlNode類可以用來在XML文檔中向一個用于檢驗的XmlNode 對象分配一個特定節點。

XmlNamedNodeMap類用來列舉建立在一個元素類型選擇中的屬性集合。 DocumentNavigator、 XmlTextReader和XmlTextWriter類提供與XML一起使用所需要的額外功能。要特別說明的是,DocumentNavigator可以用來執行XPath查詢,它被包含在XSLT轉換中。XmlTextReader類提供對XML節點的只向前(forward-only)、無緩存的訪問,從而使XML節點對大型XML文檔也同樣生效。XmlTextWriter類提供一個快速、只向前的指針模型,實現將 XML 內容寫到一個流或一個文件中的目的。

在菜單應用程序中使用的XML 文檔相對來說是較小的,因此我們可以在服務器端使用文檔對象模式(DOM)來存取XML文檔中的不同節點。當分解大型 XML文檔時,就需要使用XmlTextReader 類所含有的只向前模型。

#p#

XML 代碼

菜單應用程序使用了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頁面請求時隨時地生成。

在構造器之后,開始定義 CreateMenu()方法,具體請看List 2中的代碼。

這個方法負責進行XML文檔的裝載和解析,找到根節點,然后在根的子節點之間循環。如果發現一個子節點本身還有子節點,就調用WalkTree() 方法,并且把這些子節點都傳遞到其中。如果這些子節點還有子節點,就再次調用 WalkTree()。這個過程循環進行直到不再發現增加的子節點。Walktree()方法的代碼可以參看List 3。

在調用 WalkTree()方法并且對不同的節點進行分析的同時,要解析 menuItem節點,將來自其超級鏈接和名字節點的數據放在數組列表中。對整個 XML文檔都進行解析之后,數組列表的內容就被傳遞回調用的ASP.NET的頁面,然后使用Response對象寫出信息。從這時起,客戶端的 JavaScript代碼就開始控制DHTML 菜單了。

在服務器端,我們使用一個 ASP.NET頁面來開始菜單的創建過程。這個頁面輸入了與集合相關聯的名稱空間XmlHierMenu:

<%@ page language="C#" %>

<%@ Import Namespace="XmlHierMenu" %>

然后,將樣式表文件和 JavaScript文件包含在文件的 代碼區中。最后,在 ASP.NET 頁面底部的代碼用來引用上面提到的CreateMenu() 方法與WalkTree()方法,請看List 4。

在ASP.NET 頁面中所找到的C# 代碼只是建立了到不同的XML文檔的路徑,并且對 XmlMenu 類進行了例示。一旦對這個類進行了例示,就對 CreateMenu()方法進行調用。這個方法接收菜單名以及到這個菜單的XML文檔的文件路徑。在本例中,要創建3個名為menu1、 menu2和 menu3 的菜單,然后在一個ASP.NET頁面中使用。這個應用程序在一個給定頁面中可以支持無窮多的菜單,但是我們建議菜單數目不要過多,因為每增加一個菜單,發送到客戶端的文件規模都會增加。

編譯 C# 文件

現在我們已經看到了菜單應用程序的結構,接下來討論一下使用哪些開關可以將C# 文件編譯到一個集合中。在 .Net SDK 文檔中,我們可以查詢到一個所有編譯開關的完整列表。

要想正確地編譯 C# 文件以使它能用于一個ASP.NET 頁面中,編譯器就必須要知道包含了System.Xml 集合。這可以通過使用 /r 開關并在后面加上到集合的完整路徑來完成。由于將要創建的 dll是一個庫,因此就必須指定 /t開關,這樣編譯器就不再尋找一個靜態的 Main() 方法。最后一個需要的開關是 /out ,它將告訴編譯器輸出的文件名是什么,以及將其放在哪里。

所有對 C# 編譯器的調用都以 csc (C# 編譯器)開始,然后指定適當的開關。編譯器語法的最后一部分包括到已創建的 .cs 文件的路徑。請看下面的編譯文件的完整語法格式:

 C:\>csc /r:System.Xml.dll / 

   t:library /out:d:\inetpub\wwwroot\ 

   xml\bin\xmlMenus.dll d:\inetpub\ 

   wwwroot\xml\menus\xmlMenus.cs 

這行命令告訴編譯器包含 System.Xml 集合、將文件作為一個庫進行編譯、將文件輸出到 bin目錄中、輸入文件命名為xmlMenus.cs,輸出文件名叫xmlMenus.dll。當輸入回車鍵后,.cs文件就進行編譯,生成的 dll將被放置在適當的文件夾中。

結束語

本文通過講解一個應用程序的思路及實現代碼,使我們對于使用Microsoft .Net平臺中的一些集合和類有了一個很好的了解。隨著進一步的學習,我們將看到,還會有其它一些集合和類可以以多種方式與本地和遠程XML文檔一起工作。

【編輯推薦】

  1. 跟MVP學C#視頻教程
  2. C#必備知識之預編譯指令
  3. 使用PHP與XML進行網站編程
  4. AJAX和XmlHttpRequest下的Web開發
責任編輯:楊鵬飛 來源: PCPPC.CN
相關推薦

2009-08-19 16:42:41

C#如何使用XML

2009-08-06 16:44:03

C#創建WebServ

2009-08-24 17:24:28

C#創建XML文檔

2009-08-17 15:34:58

C#創建XML

2009-08-24 17:46:54

C#創建XML文檔

2009-08-24 17:34:14

C#創建XML Web

2009-08-21 10:00:43

C#創建XML文件XmlTextWrit

2009-08-11 13:27:09

C#動態圖像按鈕

2009-08-18 14:25:05

C# 操作Excel

2009-08-18 11:17:37

C#添加鼠標右鍵

2009-08-11 13:27:22

C#創建Web Ser

2009-09-02 16:20:22

C#動態創建數組

2009-09-02 16:14:21

C#動態創建數組

2009-08-12 16:46:22

C#讀取XML文檔

2009-12-02 14:14:06

PHP DOM-XML

2009-08-18 16:42:49

C# 操作XML

2015-09-16 15:11:58

C#異步編程

2009-09-01 09:12:37

C# System.X

2009-08-18 17:08:50

C#編寫XML文檔

2009-09-04 14:14:55

C#文檔
點贊
收藏

51CTO技術棧公眾號

五月天在线免费视频| 欧美激情性做爰免费视频| 国产91色在线观看| 成人av黄色| 97se狠狠狠综合亚洲狠狠| 人妖精品videosex性欧美| 成人一级黄色大片| 日韩系列在线| 7777精品伊人久久久大香线蕉完整版 | 久久精品最新地址| 艳妇乳肉豪妇荡乳xxx| 深夜视频一区二区| 亚洲国产另类av| 亚洲一区影院| 午夜国产在线视频| 麻豆精品久久精品色综合| 国内外成人免费激情在线视频| 久久久久久国产免费a片| swag国产精品一区二区| 欧美日韩黄色影视| 久草在在线视频| wwwww亚洲| 中文字幕亚洲一区二区va在线| 精品日本一区二区| 国产日韩在线观看一区| 久久久久久黄| 午夜精品免费视频| 日韩女优一区二区| 日产午夜精品一线二线三线| 亚洲精品永久免费| 午夜福利三级理论电影| 伊人国产精品| 欧美午夜片在线观看| 91视频最新入口| 欧美xxx黑人xxx水蜜桃| 中文字幕一区二区日韩精品绯色| 日韩精品一线二线三线| 天天干天天舔天天射| 豆国产96在线|亚洲| 成人在线观看视频网站| 午夜一级黄色片| 久久久国产精品一区二区中文| 欧美高清电影在线看| 老司机福利在线观看| 国产a久久精品一区二区三区 | 欧美成人xxx| 国产偷国产偷精品高清尤物| 欧美激情专区| 日本一级在线观看| 久久综合资源网| 久久偷看各类wc女厕嘘嘘偷窃| 秋霞网一区二区| 不卡的av中国片| 国产在线精品一区二区三区》| www.国产精品视频| 国产99久久久久久免费看农村| 亚洲一区二区三区乱码aⅴ| 国产片高清在线观看| 激情文学综合丁香| 成人av资源| 少妇喷水在线观看| 26uuu欧美| 日韩精品资源| 超碰在线观看免费| 亚洲国产美国国产综合一区二区| 超碰成人免费在线| 中老年在线免费视频| 色婷婷综合视频在线观看| 亚洲一二三区av| 男女啪啪999亚洲精品| 欧美日本在线一区| 伊人av在线播放| 大陆精大陆国产国语精品| 亚洲福利在线观看| av黄色在线免费观看| 日韩在线二区| 久久亚洲春色中文字幕| 永久看片925tv| 亚洲人www| 国产69久久精品成人| 亚洲精品男人的天堂| 日韩在线观看一区二区| 国产精品免费视频xxxx| 黄色在线免费观看| 久久se精品一区精品二区| 成人网页在线免费观看| 精品久久久久久亚洲综合网站| 国产99久久久久| 麻豆成人在线播放| 成年人在线观看视频| 中文字幕一区日韩精品欧美| 麻豆传媒网站在线观看| 爆操欧美美女| 午夜电影久久久| www.欧美日本| 国产精品3区| 精品国产一区二区亚洲人成毛片| 欧美色图亚洲激情| 成人在线免费观看91| 久久在线精品视频| 精品欧美一区二区三区免费观看 | 成人在线免费观看91| 欧美裸体男粗大视频在线观看| 国产无遮挡aaa片爽爽| 久久深夜福利| 亚洲一区二区三区在线视频| 亚洲精品一区二区三区区别| 久久久久99精品国产片| 欧美日韩亚洲国产成人| 日韩激情电影| 91精品国产91久久久久久一区二区| 日韩高清一二三区| 久草在线成人| 欧美成人小视频| 亚洲综合久久网| 黑人巨大精品欧美一区| 茄子视频成人在线观看 | 国产精品福利在线播放| 久操网在线观看| 成人激情综合| 日韩av在线最新| 杨钰莹一级淫片aaaaaa播放| 国产一区二区你懂的| 国产精品毛片无遮挡高清| 福利在线小视频| 成人性生交大片免费网站| 欧美一区二区播放| 一区二区黄色片| 99精品电影| 国产福利视频一区| 欧美自拍第一页| 亚洲蜜臀av乱码久久精品| 精品视频一区二区在线| 久久一级大片| 色哟哟入口国产精品| 国产农村妇女aaaaa视频| 国产福利91精品一区二区三区| 日韩高清国产一区在线观看| av免费在线网站| 欧美精品一二三| 中字幕一区二区三区乱码| 亚洲久色影视| 国产经典一区二区三区| 成人在线播放| 欧美日韩电影在线播放| 日韩一级av毛片| 午夜在线观看免费一区| 国产伦精品一区二区三区免| 亚洲男同gay网站| 欧美一区二区美女| 亚洲天堂网av在线| 久久99久久久欧美国产| 亚洲电影一二三区| av免费在线一区| 亚洲欧洲偷拍精品| 少妇无套内谢久久久久| 国产区在线观看成人精品| 无码人妻丰满熟妇区五十路百度| 日本高清精品| 欧美精品生活片| 999久久久久久| 亚洲欧美电影院| 无码人妻一区二区三区在线视频| 天天操夜夜操国产精品| 成人天堂噜噜噜| www久久日com| 欧美福利电影网| 久久久久黄色片| 福利视频网站一区二区三区| 日韩欧美猛交xxxxx无码| 97久久精品| 久久久久久亚洲精品| 人妻精品一区二区三区| 狠狠爱在线视频一区| 日本aaa视频| 免费永久网站黄欧美| 欧洲精品在线一区| 中文字幕在线直播| 色婷婷综合成人| 精品国产av一区二区三区| 亚洲亚洲精品在线观看| 亚洲av熟女高潮一区二区| 99国产精品视频免费观看一公开| 久久影院理伦片| 狠狠久久伊人中文字幕| 久久精品国产一区| 欧美 中文字幕| 91成人免费网站| 久久久久久久久久97| 丁香一区二区三区| 无码人妻精品一区二区三区在线| 激情综合网站| 成人在线国产精品| √8天堂资源地址中文在线| 亚洲欧美国产精品| 国产尤物在线观看| 亚洲综合一二区| 欧美激情亚洲色图| 国产成人综合网| 免费成人在线视频网站| 日韩精品dvd| 国产福利久久| 欧美www.| 欧美极品美女电影一区| 九色在线观看视频| 日韩午夜av电影| 国产午夜福利一区二区| 国产精品午夜电影| 色哟哟视频在线| 欧美a级一区二区| 麻豆传媒网站在线观看| 国产欧美久久一区二区三区| 91香蕉嫩草影院入口| 亚洲欧美一区二区三区| 粗暴蹂躏中文一区二区三区| 五月天福利视频| 91精品国产综合久久久蜜臀粉嫩| 成人在线免费看视频| 亚洲精品欧美综合四区| 亚洲第一香蕉网| 国产乱对白刺激视频不卡| 国产视频一视频二| 在线看片一区| 三年中文高清在线观看第6集| 精品国内亚洲2022精品成人| 国产欧美日韩精品丝袜高跟鞋| 2019中文字幕在线电影免费 | 国产福利资源在线| 在线区一区二视频| 久久夜色精品国产噜噜亚洲av| 亚洲男同性视频| 岛国片在线免费观看| 久久久www免费人成精品| 精品国产乱码久久久久夜深人妻| 精品在线你懂的| 999精品视频在线| 99热这里只有精品8| 男女激情免费视频| 欧美精品国产| 久久精品国产精品亚洲精品色| 久久av电影| 精品一区久久久| 中文字幕av一区二区三区四区| 国产精品成人品| jizz久久久久久| 国产成人精品久久| 亚洲欧美电影| 欧美孕妇性xx| 九色porny丨入口在线| 欧美黑人性生活视频| 国产理论在线观看| 欧美激情第99页| 午夜激情在线| 精品综合久久久久久97| 国产在线更新| 操人视频在线观看欧美| 香蕉视频网站在线观看| 久久亚洲国产成人| 中文字幕免费高清电视剧网站在线观看| 日韩中文在线中文网三级| av资源在线观看免费高清| 亚洲无av在线中文字幕| 国产最新视频在线| 精品国产美女在线| 国产在线69| 欧美激情成人在线视频| 波多野结衣在线观看| 97国产精品视频| 国产高清自产拍av在线| 国产精品xxx视频| 欧美va在线| 成人黄色免费片| 国产午夜亚洲精品一级在线| 97人人模人人爽视频一区二区| 18国产精品| 国产精品久久久对白| 久久不卡国产精品一区二区| 美女视频久久| 青青草国产免费一区二区下载| 一本一本a久久| 欧美精品导航| 大肉大捧一进一出好爽动态图| 国产一区二区成人久久免费影院 | 五月天久久777| 日韩成人三级视频| 日韩不卡手机在线v区| 999久久久精品视频| 成人av电影在线| 永久免费毛片在线观看| 日韩一区在线看| 亚洲国产综合久久| 在线观看免费视频综合| 国产精品无码专区av免费播放| 日韩精品小视频| 精品51国产黑色丝袜高跟鞋| 久久久久久久久久久久av| 成人小电影网站| 91亚洲精品一区| 国产成人3p视频免费观看| 4444亚洲人成无码网在线观看| 99视频在线精品国自产拍免费观看| 国产精品天天av精麻传媒| 国产精品自拍三区| xxx在线播放| 亚洲va欧美va人人爽| 中文天堂在线播放| 亚洲精品一区二区三区香蕉| 电影在线高清| 久久久亚洲精品视频| 成人软件在线观看| 久久精品二区| 一区二区国产在线| www日韩视频| 99视频超级精品| 精品国产91亚洲一区二区三区婷婷| 亚洲欧美日本在线观看| 啊v视频在线一区二区三区| 国产污视频在线播放| 国产日韩欧美在线观看| 97久久综合精品久久久综合| 中文字幕日韩精品久久| 久久综合伊人| 国产老头和老头xxxx×| 国产日产欧产精品推荐色 | 深夜福利久久| 久久在线中文字幕| 久久se这里有精品| 日本裸体美女视频| 在线亚洲一区二区| 欧美偷拍视频| 欧美激情亚洲国产| 欧美高清一级片| 中文字幕欧美人与畜| 日本va欧美va欧美va精品| 青青草成人免费视频| 亚洲午夜免费视频| av高清一区二区| 在线中文字幕日韩| av高清一区| 欧美二区三区| av成人天堂| 亚洲观看黄色网| 婷婷丁香久久五月婷婷| 亚洲AV无码精品国产| 久久伊人精品天天| 国产精品xnxxcom| 伊人情人网综合| 久久精品国产精品青草| 国产91丝袜美女在线播放| 色哟哟国产精品| 天堂av在线免费观看| 国内久久久精品| 亚洲精品高潮| 18禁网站免费无遮挡无码中文| 国产 欧美在线| 久久婷婷一区二区| 精品粉嫩aⅴ一区二区三区四区| 好看的中文字幕在线播放| 91aaaa| 欧美69wwwcom| 国产男女无遮挡猛进猛出| 一区二区在线观看视频在线观看| 国产在成人精品线拍偷自揄拍| 日韩中文第一页| 日本一区二区乱| 成人午夜免费在线视频| 国产传媒久久文化传媒| 日本一级一片免费视频| 亚洲精品www久久久| 大胆人体一区二区| 色视频一区二区三区| 麻豆精品视频在线观看| 久久久久久久久久97| 精品久久久久久久人人人人传媒| 9lporm自拍视频区在线| 深田咏美在线x99av| 韩国一区二区视频| 国产污视频在线观看| 亚洲男子天堂网| 国产成年精品| 精品无码一区二区三区在线| www国产精品av| 中文字幕av影视| 日韩在线观看免费全集电视剧网站 | 国产成人免费av| 午夜片欧美伦| 天天躁日日躁狠狠躁av| 一本大道av伊人久久综合| av男人的天堂在线| 国产精品青青草| 日韩和欧美的一区| 国产极品国产极品| 日韩va亚洲va欧洲va国产| 福利一区三区| 国产精品裸体瑜伽视频| 国产精品乱码久久久久久| 亚洲国产一二三区| 国产欧美一区二区| 亚洲伦伦在线| а天堂中文在线资源|