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

首頁 > 開發 > XML > 正文

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

2024-09-05 20:55:47
字體:
來源:轉載
供稿:網友
從在復雜的b2b交易中的交換數據到為應用程序提供配置文件結構,xml在許多方面大顯身手!由于xml不斷地獲得軟件的支持,我們完全能夠預見:xml的應用將不斷增加。本文就介紹這樣一種應用程序,它使用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 目錄中一樣簡單?,F在我們就來仔細看一看那些建立在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 類所含有的只向前模型。

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文檔一起工作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av毛片网| 国产成人精品日本亚洲专区61| 精品少妇v888av| 91爱爱小视频k| 亚洲欧美另类中文字幕| 日本高清视频一区| 成人精品视频久久久久| 日本亚洲欧美成人| 色综合伊人色综合网| 亚洲欧美中文在线视频| 欧美专区在线观看| 理论片在线不卡免费观看| 国产精品久久久久久久久久东京| 欧美xxxwww| 亚洲精品97久久| 国产成人啪精品视频免费网| 国产日韩一区在线| 北条麻妃在线一区二区| 色婷婷av一区二区三区久久| 国产成人avxxxxx在线看| 4438全国亚洲精品在线观看视频| 疯狂欧美牲乱大交777| 欧美高清不卡在线| 91国内精品久久| 国产欧美日韩丝袜精品一区| 性色av香蕉一区二区| 日韩av手机在线观看| 精品亚洲va在线va天堂资源站| 成人有码视频在线播放| 欧美性黄网官网| 久久久久久欧美| 午夜精品一区二区三区视频免费看| 亚洲乱码国产乱码精品精天堂| 国产丝袜一区二区| 亚洲精品成人久久| 久久五月天综合| 亚洲视频在线视频| 欧美在线不卡区| 亚洲欧美成人网| 久久777国产线看观看精品| 午夜精品久久久久久久99热| 国产一区香蕉久久| 日韩欧美亚洲一二三区| 亚洲mm色国产网站| 亚洲图片制服诱惑| 成人av电影天堂| 伊人一区二区三区久久精品| 日韩专区中文字幕| 91av网站在线播放| 日韩有码视频在线| 这里只有视频精品| 久久伊人精品一区二区三区| 亚洲深夜福利网站| 国产日韩精品视频| 91视频国产一区| 亚洲男人的天堂在线播放| 国产精品视频免费观看www| 精品中文字幕在线| 国产成人精品在线| 精品亚洲国产视频| 国产美女久久久| 色七七影院综合| 精品国产欧美一区二区三区成人| 51精品在线观看| 91黄色8090| 91探花福利精品国产自产在线| 精品国产一区二区在线| 伊人久久精品视频| 亚洲精品国产成人| 中文字幕亚洲色图| 欧美日韩国产在线| 亚洲成年人影院在线| 国产午夜精品免费一区二区三区| 亚洲精品国产精品国自产在线| 国产精品2018| 欧美激情国产精品| 久久99精品久久久久久噜噜| 久久久久久久久久av| 国产不卡av在线| 国产一区二区三区在线观看视频| 日韩中文娱乐网| 成人免费看吃奶视频网站| 欧美激情亚洲视频| 日韩国产高清污视频在线观看| 午夜精品美女自拍福到在线| 亚洲国产精品成人av| 国产主播喷水一区二区| 色偷偷综合社区| 日韩电影免费观看在线| 色狠狠av一区二区三区香蕉蜜桃| 国产剧情日韩欧美| 91精品国产高清久久久久久91| 日韩最新中文字幕电影免费看| 国产a∨精品一区二区三区不卡| 亚洲黄色成人网| 欧美天天综合色影久久精品| 最近免费中文字幕视频2019| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲视频一区二区三区| 国产91在线播放九色快色| 欧美精品在线网站| 成人激情春色网| www高清在线视频日韩欧美| 成人久久18免费网站图片| 国产精品99久久久久久久久| 日韩经典一区二区三区| 伊人av综合网| 精品电影在线观看| 欧美电影在线观看完整版| 亚洲视频在线观看| 亚洲精品第一国产综合精品| 欧美野外猛男的大粗鳮| 久久综合伊人77777蜜臀| 亚洲第一网中文字幕| 亚洲美女久久久| 久久九九有精品国产23| 国外视频精品毛片| 伊人久久免费视频| 国内精品久久久| 欧美精品18videos性欧美| 亚洲欧美精品中文字幕在线| 92版电视剧仙鹤神针在线观看| 午夜精品福利在线观看| 亚洲精品www久久久| 青青草国产精品一区二区| 久热精品视频在线观看一区| 国产精品扒开腿做爽爽爽视频| 成人久久精品视频| 2023亚洲男人天堂| 亚洲精品之草原avav久久| 亚洲精品视频中文字幕| 亚洲国产日韩精品在线| 亚洲r级在线观看| 精品久久香蕉国产线看观看亚洲| 国产女同一区二区| 国产极品精品在线观看| 一夜七次郎国产精品亚洲| 亚洲在线视频观看| 日韩免费在线播放| 精品美女久久久久久免费| 欧美黑人xxx| 久久成人人人人精品欧| 亚洲网站在线看| 欧美主播福利视频| 成人午夜激情免费视频| 午夜精品福利在线观看| 日韩免费av一区二区| 在线视频日本亚洲性| 伊人久久久久久久久久久久久| 亚洲第一色在线| 国产精品成人va在线观看| 草民午夜欧美限制a级福利片| 色与欲影视天天看综合网| 欧美天天综合色影久久精品| 亚洲国产日韩欧美在线动漫| 精品久久久久久久久久久| 亚洲人精品午夜在线观看| 中文字幕欧美专区| 精品一区二区三区四区在线| 成人亚洲综合色就1024| 亚洲欧美日本精品| 日韩欧美国产免费播放| 亚洲国产精品电影在线观看| 亚洲另类激情图|