亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發(fā) > XML > 正文

用C#與XML創(chuàng)建動(dòng)態(tài)分層菜單

2024-09-05 20:55:47
字體:
供稿:網(wǎng)友
從在復(fù)雜的b2b交易中的交換數(shù)據(jù)到為應(yīng)用程序提供配置文件結(jié)構(gòu),xml在許多方面大顯身手!由于xml不斷地獲得軟件的支持,我們完全能夠預(yù)見:xml的應(yīng)用將不斷增加。本文就介紹這樣一種應(yīng)用程序,它使用xml創(chuàng)建類似于windows開始菜單的分層菜單系統(tǒng),從而向終端用戶提供更滿意的web體驗(yàn)。

  這個(gè)應(yīng)用程序?qū)⑹褂?c#、xml和服務(wù)器端microsoft .net框架,創(chuàng)建一個(gè) dhtml 結(jié)構(gòu),ie4 或更高版本的瀏覽器可以操作它并在客戶端動(dòng)態(tài)顯示。由于我們可以快速地訪問服務(wù)器上的xml,并且xml能夠描述層次之間的關(guān)系,因此它成為標(biāo)記“父/子菜單”數(shù)據(jù)的一個(gè)最佳選擇。


 ?。ㄒ粋€(gè)三層菜單系統(tǒng),可點(diǎn)擊放大)

  除了學(xué)習(xí)如何使用xml創(chuàng)建一個(gè)菜單應(yīng)用程序外,我們還要介紹 .net框架的主要 xml 類,它們位于 system.xml 集合中。

什么是.net集合(assembly)
  要在 c# 文件中使用xml,就必須引用一個(gè)特定的名稱空間。 .net平臺(tái)中的一個(gè)名稱空間是作為一個(gè)程序組件的組織系統(tǒng)使用的,它對(duì)于解決命名沖突很重要,這一點(diǎn)很象 xml中的 名稱空間。這個(gè)基于 xml的菜單系統(tǒng)是用位于system.xml集合中的system.xml名稱空間創(chuàng)建的。.net sdk 是這樣定義集合的:一個(gè)集合就是一個(gè)類型和資源的匯集信息,這些類和資源一起使用,形成一個(gè)功能的邏輯單元,即一個(gè)“邏輯”dll。

  一個(gè)集合需要許多物理文件,如界面、類、資源文件等等,并且創(chuàng)建了關(guān)于文件如何一起工作的元數(shù)據(jù)。集合中還可能包含版本及安全信息。集合有許多好處,其中之一就是可以在asp.net應(yīng)用程序中使用,而無須用regsvr32.exe向注冊(cè)文件中增加一個(gè)類識(shí)別號(hào)(clsid)。這樣以來,集合的升級(jí)操作與將適當(dāng)?shù)募蠌?fù)制到一個(gè)asp.net 應(yīng)用程序的bin 目錄中一樣簡單?,F(xiàn)在我們就來仔細(xì)看一看那些建立在system.xml名稱空間和集合中的類。

  如果你以前使用過microsoft的 msxml3分解器,就會(huì)發(fā)現(xiàn)使用system.xml 集合中的類相當(dāng)簡單。這里的菜單應(yīng)用程序只使用了這些主要集合類中的一部分:xmlnode、 xmldocument、 xmlnodelist、 xmlnamednodemap、 documentnavigator、 xmltextreader和 xmltextwriter。

  xmldocument、 xmlnodelist和xmlnode類用來創(chuàng)建傳遞給客戶端瀏覽器的菜單應(yīng)用程序的結(jié)構(gòu)。用xmldocument類以一種安全線程(thread-safe)的方式從服務(wù)器上裝載和分解本地或遠(yuǎn)程xml 文檔。建立在一個(gè)字符串中的 xml標(biāo)記也可以被裝載或分解,從而在一個(gè)文檔中創(chuàng)建、移動(dòng)節(jié)點(diǎn)或取消節(jié)點(diǎn)的移動(dòng)。xmlnodelist 類可以使我們列舉一個(gè)節(jié)點(diǎn)的集合來訪問一個(gè)特定屬性,如名稱、值或名稱空間。最后,xmlnode類可以用來在xml文檔中向一個(gè)用于檢驗(yàn)的xmlnode 對(duì)象分配一個(gè)特定節(jié)點(diǎn)。

  xmlnamednodemap類用來列舉建立在一個(gè)元素類型選擇中的屬性集合。 documentnavigator、 xmltextreader和xmltextwriter類提供與xml一起使用所需要的額外功能。要特別說明的是,documentnavigator可以用來執(zhí)行xpath查詢,它被包含在xslt轉(zhuǎn)換中。xmltextreader類提供對(duì)xml節(jié)點(diǎn)的只向前(forward-only)、無緩存的訪問,從而使xml節(jié)點(diǎn)對(duì)大型xml文檔也同樣生效。xmltextwriter類提供一個(gè)快速、只向前的指針模型,實(shí)現(xiàn)將 xml 內(nèi)容寫到一個(gè)流或一個(gè)文件中的目的。

  在菜單應(yīng)用程序中使用的xml 文檔相對(duì)來說是較小的,因此我們可以在服務(wù)器端使用文檔對(duì)象模式(dom)來存取xml文檔中的不同節(jié)點(diǎn)。當(dāng)分解大型 xml文檔時(shí),就需要使用xmltextreader 類所含有的只向前模型。

xml 代碼
  菜單應(yīng)用程序使用了3個(gè) xml 文檔:menuitems.xml、menuitems2.xml 和menuitems3.xml,它們用于標(biāo)記單獨(dú)的菜單項(xiàng)目。xml的處理和操作由一個(gè)叫做xmlmenus.dll的集合完成,這個(gè)集合被服務(wù)器端的一個(gè)asp.net 文件createmenus.aspx所使用。在客戶端的動(dòng)態(tài)html (dhtml)內(nèi)容使用了一個(gè)層疊格式表文件和一個(gè)javascript文件,這些文件聯(lián)合在一起生成了本文開始部分的圖示結(jié)果。

我們?cè)趌ist 1的代碼顯示了用來標(biāo)記單獨(dú)菜單項(xiàng)目的xml文檔的一部分。文檔中的主元素命名為menuitem,它可以包含一個(gè)名字和超級(jí)鏈接元素以及額外的menuitem 子元素。這種關(guān)系可以用來創(chuàng)建包含子菜單的菜單系統(tǒng),就象windows的開始菜單一樣。
  由于 xml已經(jīng)標(biāo)出了分層關(guān)系,因此就可以利用循環(huán)在不同元素之間行走:當(dāng)使用xmldocument、xmlnode和xmlnodelist類創(chuàng)建子節(jié)點(diǎn)時(shí),我們可以反復(fù)調(diào)用walktree() 函數(shù)以顛倒父/子關(guān)系。其它的類如 arraylist和 streamwriter用于將相關(guān)菜單歸類到數(shù)組中,然后在適當(dāng)時(shí)間將所生成的菜單結(jié)構(gòu)寫入一個(gè)文件中。

  xmlmenus集合的代碼開始時(shí)要聲明一個(gè)xmlhiermenu 名稱空間,接下來要引用 system、 system.xml、 system.collections和system.io 名稱空間:

  using system;

  using system.xml;

  using system.collections;

  using system.io;

  在這部分代碼之后要?jiǎng)?chuàng)建3個(gè)構(gòu)造器。一個(gè)構(gòu)造器不接收變量,只對(duì)變量進(jìn)行初始化。下一個(gè)構(gòu)造器接收一個(gè)圖象文件的定制路徑。最后一個(gè)構(gòu)造器在不經(jīng)常對(duì)xml菜單進(jìn)行刷新的情況下,允許將由集合生成的輸出存儲(chǔ)到一個(gè)文件中。最后一個(gè)構(gòu)造器所生成的文件可以被靜態(tài)地包含在一個(gè) asp.net文件中,而不是在各個(gè)web頁面請(qǐng)求時(shí)隨時(shí)地生成。

在構(gòu)造器之后,開始定義 createmenu()方法,具體請(qǐng)看list 2中的代碼。
這個(gè)方法負(fù)責(zé)進(jìn)行xml文檔的裝載和解析,找到根節(jié)點(diǎn),然后在根的子節(jié)點(diǎn)之間循環(huán)。如果發(fā)現(xiàn)一個(gè)子節(jié)點(diǎn)本身還有子節(jié)點(diǎn),就調(diào)用walktree() 方法,并且把這些子節(jié)點(diǎn)都傳遞到其中。如果這些子節(jié)點(diǎn)還有子節(jié)點(diǎn),就再次調(diào)用 walktree()。這個(gè)過程循環(huán)進(jìn)行直到不再發(fā)現(xiàn)增加的子節(jié)點(diǎn)。walktree()方法的代碼可以參看list 3。
  在調(diào)用 walktree()方法并且對(duì)不同的節(jié)點(diǎn)進(jìn)行分析的同時(shí),要解析 menuitem節(jié)點(diǎn),將來自其超級(jí)鏈接和名字節(jié)點(diǎn)的數(shù)據(jù)放在數(shù)組列表中。對(duì)整個(gè) xml文檔都進(jìn)行解析之后,數(shù)組列表的內(nèi)容就被傳遞回調(diào)用的asp.net的頁面,然后使用response對(duì)象寫出信息。從這時(shí)起,客戶端的 javascript代碼就開始控制dhtml 菜單了。

  在服務(wù)器端,我們使用一個(gè) asp.net頁面來開始菜單的創(chuàng)建過程。這個(gè)頁面輸入了與集合相關(guān)聯(lián)的名稱空間xmlhiermenu:

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

  <%@ import namespace="xmlhiermenu" %>

然后,將樣式表文件和 javascript文件包含在文件的 代碼區(qū)中。最后,在 asp.net 頁面底部的代碼用來引用上面提到的createmenu() 方法與walktree()方法,請(qǐng)看list 4。
  在asp.net 頁面中所找到的c# 代碼只是建立了到不同的xml文檔的路徑,并且對(duì) xmlmenu 類進(jìn)行了例示。一旦對(duì)這個(gè)類進(jìn)行了例示,就對(duì) createmenu()方法進(jìn)行調(diào)用。這個(gè)方法接收菜單名以及到這個(gè)菜單的xml文檔的文件路徑。在本例中,要?jiǎng)?chuàng)建3個(gè)名為menu1、 menu2和 menu3 的菜單,然后在一個(gè)asp.net頁面中使用。這個(gè)應(yīng)用程序在一個(gè)給定頁面中可以支持無窮多的菜單,但是我們建議菜單數(shù)目不要過多,因?yàn)槊吭黾右粋€(gè)菜單,發(fā)送到客戶端的文件規(guī)模都會(huì)增加。

編譯 c# 文件
  現(xiàn)在我們已經(jīng)看到了菜單應(yīng)用程序的結(jié)構(gòu),接下來討論一下使用哪些開關(guān)可以將c# 文件編譯到一個(gè)集合中。在 .net sdk 文檔中,我們可以查詢到一個(gè)所有編譯開關(guān)的完整列表。

  要想正確地編譯 c# 文件以使它能用于一個(gè)asp.net 頁面中,編譯器就必須要知道包含了system.xml 集合。這可以通過使用 /r 開關(guān)并在后面加上到集合的完整路徑來完成。由于將要?jiǎng)?chuàng)建的 dll是一個(gè)庫,因此就必須指定 /t開關(guān),這樣編譯器就不再尋找一個(gè)靜態(tài)的 main() 方法。最后一個(gè)需要的開關(guān)是 /out ,它將告訴編譯器輸出的文件名是什么,以及將其放在哪里。

  所有對(duì) c# 編譯器的調(diào)用都以 csc (c# 編譯器)開始,然后指定適當(dāng)?shù)拈_關(guān)。編譯器語法的最后一部分包括到已創(chuàng)建的 .cs 文件的路徑。請(qǐng)看下面的編譯文件的完整語法格式:

  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 集合、將文件作為一個(gè)庫進(jìn)行編譯、將文件輸出到 bin目錄中、輸入文件命名為xmlmenus.cs,輸出文件名叫xmlmenus.dll。當(dāng)輸入回車鍵后,.cs文件就進(jìn)行編譯,生成的 dll將被放置在適當(dāng)?shù)奈募A中。

結(jié)束語
  本文通過講解一個(gè)應(yīng)用程序的思路及實(shí)現(xiàn)代碼,使我們對(duì)于使用microsoft .net平臺(tái)中的一些集合和類有了一個(gè)很好的了解。隨著進(jìn)一步的學(xué)習(xí),我們將看到,還會(huì)有其它一些集合和類可以以多種方式與本地和遠(yuǎn)程xml文檔一起工作。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
中文字幕欧美日韩一区二区三区| 日日噜噜噜夜夜爽爽狠狠视频| 中文字幕久热精品在线视频| 一级黄色性视频| 在线不卡欧美精品一区二区三区| 九九九久久久久久| 二区视频在线观看| 第一页在线观看| av一线二线| 视频午夜在线| 亚洲a在线播放| 国产精品国产三级欧美二区| 精品99一区二区| 精品亚洲一区二区三区| 亚洲天堂第二页| 亚洲成人激情小说| 青青草国产免费| 日韩专区中文字幕一区二区| 亚洲伊人观看| 国产精品333| 日韩伦理一区| 国产福利精品av综合导导航| 欧美日韩中国免费专区在线看| 欧美人善zozσ性伦交| 欧美在线不卡| 国产精品久久久久久在线观看| 国产日产精品久久久久久婷婷| 久久久久久久美女| 亚洲国产精品久久久久蝴蝶传媒| 日本 欧美 国产| 高清福利在线观看| 国产精品12345| 国产黄色成人av| www.97av.com| 亚洲欧洲无码一区二区三区| 少妇视频在线观看| 欧美videos巨大粗暴| 亚洲天堂中文字幕在线观看| 涩涩网站在线观看| 自拍偷拍欧美激情| 456亚洲影院| 久草在线免费二| 色www亚洲国产阿娇yao| 丁香花电影在线观看完整版| 蜜桃日韩视频| 蜜臀久久久久久999| 日韩二区三区在线| 欧美人动性xxxxz0oz| 日本青青草视频| 在线成人av电影| 中国av一区| 露脸国产精品自产在线播| 亚洲第一区色| 免费国产亚洲视频| 国产91丝袜在线18| 国产特黄大片aaaa毛片| 人人妻人人藻人人爽欧美一区| 国产又粗又大又爽视频| 无码无套少妇毛多18pxxxx| 粗大黑人巨茎大战欧美成人| 最近免费中文字幕视频2019| 欧美人禽zoz0强交| heyzo在线| 精品美女久久久久久免费| 久久久精品中文字幕| 久久综合伊人77777麻豆最新章节| 成本人h片动漫网站在线观看| 中国大陆高清aⅴ毛片| 欧美日韩国产在线观看网站| 99精品一区二区三区无码吞精| 岛国在线视频免费看| 久久国产亚洲精品| 国产成人精品久久二区二区| 男人天堂va| 美女脱光内衣内裤| 欧美日韩另类综合| 天天骑夜夜操| 性欧美超级视频| 欧美另类交人妖| 中文字幕激情视频| 91精品啪在线观看国产81旧版| 99re这里只有精品首页| 欧美久久一二区| 久色乳综合思思在线视频| 日韩三级在线观看| 成人美女视频在线观看| 国产精品久久久久久久久久尿| 91精品国产综合久久久久久| 精品国产午夜肉伦伦影院| 狠狠躁夜夜躁人人躁婷婷91| 欧美va天堂在线| 视频一区二区中文字幕| 成人免费高清在线观看| 四虎影在永久在线观看| 国产高清av| 国产免费观看久久黄| 欧美精品videosbestsex另类| 亚洲视频香蕉人妖| 亚洲av人人澡人人爽人人夜夜| 麻豆9191精品国产| 黄av在线播放| 日本三级很黄试看120秒| 日韩美女视频在线观看| 欧美日韩aaaaa| 国产精品丝袜黑色高跟| 国产自偷自偷免费一区| 1024精品一区二区三区| 国产精品久久久精品四季影院| 国产一级精品aaaaa看| 亚洲精品四区| 成品网站w灬+源码1688网页| 国产一区 二区 三区一级| 在线人成动漫视频在线观看| 日韩电影免费在线| 国产美女主播在线播放| 成人综合网站| 亚洲天堂一区二区三区| 久久aⅴ国产欧美74aaa| 欧美视频中文一区二区三区在线观看| 黄色一级片播放| 99re在线视频上| 午夜爱爱毛片xxxx视频免费看| 好吊日av在线| 欧美精品九九| 3d欧美精品动漫xxxx无尽| 无码人妻丰满熟妇区五十路| 久久精品超碰| 久久久国产一区二区三区| 日韩久久久久| 爱福利视频一区二区| 17c丨国产丨精品视频| 一区二区三区加勒比av| 日韩成人在线免费视频| 亚洲少妇屁股交4| 久久先锋影音av| 奇米777国产一区国产二区| 日本黄色免费| 精品国产乱码久久久久久蜜坠欲下| 国产午夜一区二区三区| 日本久久久久久久久| 高清一区二区视频| 亚洲欧美综合国产精品一区| 国产麻豆麻豆| 变态调教一区二区三区| 亚洲s码欧洲m码国产av| 五月激情婷婷网| 国产精品wwww| 另类激情亚洲| 九九久久国产精品| 亚洲专区视频| 久久天堂av综合合色| 国产 欧美 日本| 久久免费少妇高潮99精品| 久操手机在线视频| 亚洲熟女少妇一区二区| 欧美一区二区三区啪啪| 成人亚洲性情网站www在线观看| 亚洲永久免费观看| h视频在线免费看| 欧美日本国产视频| 瑟瑟视频在线看| 飘雪影院手机免费高清版在线观看| 男女18免费网站视频| 国产精品com| 无码黑人精品一区二区| 国产乱子伦一区二区三区国色天香| 在线观看视频一区| 色狮一区二区三区四区视频| 久久久久久久久99| 99精品欧美| 亚洲国产午夜| 欧美日韩亚洲第一页| 久久亚洲AV无码专区成人国产| 国内少妇毛片视频| 先锋影音男人站你懂得| 中文字幕在线亚洲三区| 精品一区二区综合| 一呦二呦三呦国产精品| 无码熟妇人妻av在线电影| 天堂网2014av| 亚洲女爱视频在线| 欧美va天堂va视频va在线| 爱啪视频在线观看视频免费| 高清不卡亚洲| 欧美日韩激情电影| 欧美体内she精视频| 亚州欧美一区三区三区在线| 欧美成人一区二区三区电影| 国产第一页精品| 1024亚洲| 99精品热6080yy久久| 狠狠综合久久久综合| 青青免费在线视频| 99精品中文字幕| 黄色成人在线网址| 91福利免费观看| 91国产美女在线观看| 久久精品视频日本| 日韩av大片免费看| 欧美综合在线第二页| 青草热久免费精品视频| 国产理论在线观看| 综合av第一页| 国产成人自拍在线| 久久久99精品免费观看| 黄色网页在线免费观看| 中文字幕在线观看第二页| 特大巨黑人吊性xxxxn38| 一区二区三国产精华液| 日本激情视频在线播放| 在线成人免费av| 天堂中文在线视频| 亚洲最大av在线| 亚洲一区免费看| 欧美亚洲免费高清在线观看| 亚洲av无码专区在线播放中文| 欧美精品v日韩精品v国产精品| 婷婷综合久久一区二区三区| 亚洲福利在线视频| www.国产免费| 中文字幕 日韩有码| 性高潮久久久久久| 五月婷婷六月综合| 国产欧美一区二区三区小说| 精品日本一线二线三线不卡| 2023国产精品久久久精品双| 在线观看国产欧美| 91蜜桃传媒精品久久久一区二区| 久久福利综合| 国产视频精品自拍| 欧美va天堂va视频va在线| 欧美三区视频| 九九**精品视频免费播放| 欧美精品丝袜中出| 亚洲永久无码7777kkk| 久久青青草原一区二区| 成人免费观看av| 成人免费视频app| 国产精品二区在线观看| 51久久夜色精品国产麻豆| 欧美日韩国产综合久久| 欧美白人最猛性xxxxx69交| 波多野结衣毛片| 久久久久久久久毛片| 亚洲人成伊人成综合网小说| 都市激情久久| 亚洲最大黄网| 国产精品网站视频| 国产成人精品实拍在线| 亚洲国产不卡| 中文字幕av网站| 亚洲精品一区二三区不卡| 亚洲欧洲成人| 日韩av成人在线观看| 成人免费黄色网页| 一区二区日本伦理| 国产精品五区| 国产在线视频欧美一区| 亚洲一区二区三区免费在线观看| 国产在线色视频| 91在线国产剧情| 亚洲男人天堂| 亚洲第一页综合| 国产亚洲欧美日韩精品| 亚洲婷婷综合网| 在线天堂一区av电影| 少妇高潮一区二区三区69| 国产成人精品男人的天堂538| 久久久久久爱| 亚洲尤物av| www.成年人视频| 视频免费在线观看| 99高清视频有精品视频| 国产精品亚洲一区二区无码| 国产精品久久久久久久免费| 国精产品一区二区三区| 国产91免费看片| 日韩欧美视频在线| 91亚洲资源网| 精品国产精品一区二区夜夜嗨| 性亚洲最疯狂xxxx高清| 奇米精品在线| 草莓视频一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4| 欧美亚洲免费电影| 欧美日韩在线视频首页| 亚洲最大av网站| 国内精品久久久久影院优| 国产精品久久久久久久av福利| a级在线观看视频| 国产精品第100页| 香蕉av一区二区| 91久久久久久久久久久久久| 日本不卡一区二区三区四区| 97久久天天综合色天天综合色hd| 一个色综合av| 日韩激情视频在线观看| 亚洲人成毛片在线播放女女| 日韩免费性生活视频播放| 国产在线资源一区| 亚洲人成精品久久久| 激情亚洲成人| 999在线精品| 美女色狠狠久久| 在线视频观看亚洲| 国产剧情一区| 日韩国产美国| 欧美一级搡bbbb搡bbbb| 国产一区二区免费电影| 成人在线免费电影网站| 亚洲欧美日韩视频一区| 高潮毛片在线观看| 久久黄色免费网站| 国产成人精品久久二区二区91| 亚洲乱妇老熟女爽到高潮的片| 亚洲人成电影网站色mp4| 欧美日韩精品中文字幕一区二区| 国产成人免费看一级大黄| 久久天堂av| 色狠狠久久av综合| 亚洲天堂男人的天堂| 久久国产欧美精品| 欧美一级日本a级v片| 欧美国产日韩亚洲一区| xxxxxx在线观看| av一区二区三区免费观看| 日韩伦理在线观看| 亚洲码在线观看|