擴展標記語言 (Extensible Markup Language, XML) ,用於標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標
記語言進行定義的源語言。 XML是標准通用標記語言 (SGML) 的子集,非常適合 Web 傳輸。XML 提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。點擊這兒查看什麼是XML
C#提供了許多相關類處理Xml數據,如處理stream的類: XmlReader和XmlWriter; DOM的類:XmlNode、XmlDocument和XmlElement等; Xpath的類:XmlNavigator;XSLT的類:XslTransform。
顯示Xml文件內容
用C#編程實現顯示Xml文件中信息的方法是使用.Net提供的標准類把Xml文件內容讀入一個StreamReader類對象中,再用XmlDataDocument類的DataSet讀Xml的方法去讀Xml信息到DataSet中,DataSet再以DataView的方式賦給一個Web Form上的DataGrid,最後由DataBind顯示數據,具體實現代碼如下:
using System.Xml;
//處理Xml必須加的Namespace,還需在References中加System.Xml.Dll
using System.IO;
//讀Xml文件必須加的Namespace
然後在Page_Load中加入如下代碼:
protected void Page_Load(object sender, EventArgs e){
string datafile="guest.Xml" ;
//假設Xml文件名為guest.Xml
StreamReader tyj=new StreamReader(Server.MapPath(datafile));
XmlDataDocument datadoc = new XmlDataDocument();
//創建該對象為了讀取Xml
datadoc.DataSet.ReadXml(tyj);
//讀取guest.Xml文件內容
DataGrid1.DataSource = datadoc.DataSet.Tables[0].DefaultView;
//設置DataGrid數據源
DataGrid1.DataBind();
//綁定
datadoc=null ;
//釋放資源
tyj.Close();}
//釋放StreamReader類,這非常重要,否則下次打開會顯示文件已經被使用
對應於顯示用的Web Form中DataGrid的功能,我們需要增加下面的函數:
protected void OnSelectName(object sender,EventArgs e) {
Session["select_name"]=(string)DataGrid1.SelectedItem.Cells[1].Text.ToString();
//把選定的 DataGrid某行中的一個單元中的值(Name)存入一個會話變量中,以便下一頁用
Response.Redirect("Xml_manage.aspx");}
//轉到有增加刪除功能的管理頁
Web Form加入以下代碼:
<asp:DataGrid id=DataGrid1 runat="server" onselectedindexchanged="OnSelectName" >
<property name="Columns">
<asp:buttoncolumn Text="選擇" commandname="Select" />
</property>
代碼中劃線部分的作用是當按了“選擇”按鈕後,執行OnSelectName()中的程序,把選定的 DataGrid中某行中的一個單元中的值(Name)存入一個會話變量中,然後轉到
增加Xml文件內容
在Web Form中分別增加相應的四個Label(姓名,來自哪裡,Email地址,留言內容)和四個TextBox和一個用於提交的Button,並為這button增加如下代碼:
string datafile = "guest.Xml" ;XmlDocument Xmldocument = new XmlDocument() ;
Xmldocument.Load(Server.MapPath(datafile)) ;
//把guest.Xml讀到Xmldocument中
DocumentNavigator navigator = new DocumentNavigator(Xmldocument) ;
//最重要的類
navigator.MoveToDocumentElement() ;
navigator.Insert(System.Xml.TreePosition.FirstChild, XmlNodeType.Element, "Guest","","") ;//插入節點Guest
navigator.Insert(System.Xml.TreePosition.FirstChild, XmlNodeType.Element, "Name","","") ;
navigator.Insert(System.Xml.TreePosition.FirstChild, XmlNodeType.Text,"Name","","") ;
navigator.value="/Name.Text" ;
//為該節點賦值
navigator.MoveToParent() ;
//返回父節點 Guest
……
//使用同類語句,在元素Name下插入另一些元素如Country、E-mail地址和留言等
Xmldocument.Save(Server.MapPath(datafile));
//最後保存這個Xml文檔
navigator=null ;
Xmldocument=null ;
//釋放Xml文檔,這樣其他程序可以用它
上述代碼使用DocumentNavigator類增加元素和內容,注意使用後要釋放資源。
刪除Xml文件內容
刪除選定記錄,對於你上面選擇的節點,下面代碼可查找到該節點並清除選中的信息:
string datafile = "guest.Xml" ;
XmlDocument Xmldocument = new XmlDocument() ;
Xmldocument.Load(Server.MapPath(datafile)) ;
//把guest.Xml讀到Xmldocument中
DocumentNavigator navigator = new DocumentNavigator(Xmldocument) ;
navigator.MoveToDocumentElement() ;
navigator.Select("/Guests/Guest[Name=""+Session["select_name"]+""]");
//參數是XPath
navigator.RemoveSelected();
//執行刪除
Xmldocument.Save(Server.MapPath(datafile));
//最後保存這個Xml文檔
navigator=null;
//釋放類
Xmldocument=null ;
//釋放Xml文檔,這樣其他程序可以用它
如需將Xml文件中所有信息清除,使用“navigator.RemoveChildren();”語句即可實現。
綜上可知,C#編寫Xml應用程序不但快捷而且方便,在編寫ASP.Net數據庫應用程序時,用Xml文件替代一些小的Table,能減少許多數據庫存取連接,也能讓其他網絡程序更易使用這些數據。
目前Xml的主要瓶頸在於文件系統的讀出或寫入,故應使用更多內存和緩存方式,如果信息量不是巨大無比且修改量也較小,而浏覽量巨大的話,使用Xml方法將是很好的選擇;相反,如數據量巨大,應考慮使用支持Xml的數據庫,無論你使用ADO+連接其他數據庫,還是使用SQL server,C#中都有直接的類函數可讓這些數據庫中的信息直接和Xml交互訪問。