最近做了個課程大作業---web人事管理系統。
其中涉及到了xml資料互動的知識,現在記錄下來作為讀書筆記。
一。首先是在C#.net中將Treeview與xml節點資料繫結,準確來說是讀取xml資料,產生樹狀圖顯示出來。
下面是代碼與解釋
(1)包含庫
using System.Web;</p><p>using System.Web.UI;</p><p>using System.Xml;</p><p>
(2)開啟xml檔案
private static XmlDocument xmlDoc;</p><p>private void openXML()<br />{<br /> xmlDoc = new XmlDocument();<br /> xmlDoc.Load(Server.MapPath("department.xml")); //Server.MapPath("")擷取絕對路徑,有幾種方法<br />}<br />
(3)使用遞迴方法,將xml節點填入到treeview中
private void expandTree()<br /> {<br /> try<br /> {<br /> numofChild = 0;</p><p> if(xmlDoc==null)openXML();</p><p> //初始化Treeview<br /> TreeView2.Nodes.Clear();<br /> TreeView2.Nodes.Add(new TreeNode(xmlDoc.DocumentElement.Name));</p><p> TreeNode tNode = new TreeNode();<br /> tNode = TreeView2.Nodes[0]; </p><p> // 將xml節點填入treeview相應位置<br /> AddNode(xmlDoc.DocumentElement, tNode);<br /> TreeView2.ExpandAll();</p><p> }<br /> catch (XmlException xmlEx)<br /> {<br /> throw xmlEx;<br /> }<br /> catch (Exception ex)<br /> {<br /> throw ex;<br /> }<br /> }</p><p> private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode) //遞迴遍曆<br /> {<br /> XmlNode xNode;<br /> TreeNode tNode;<br /> XmlNodeList nodeList;<br /> int i;</p><p> // 遍曆所有XML nodes直到到達葉子節點.<br /> // 在迴圈過程中將節點添加到treeview中<br /> if (inXmlNode.HasChildNodes)<br /> {<br /> nodeList = inXmlNode.ChildNodes;<br /> for(i = 0; i<=nodeList.Count - 1; i++)<br /> {<br /> xNode = inXmlNode.ChildNodes[i];<br /> inTreeNode.ChildNodes.Add(new TreeNode(xNode.Name));<br /> inTreeNode.Value = xNode.Attributes["value"].Value;</p><p> tNode = inTreeNode.ChildNodes[i];<br /> AddNode(xNode, tNode);<br /> }<br /> }<br /> else<br /> {<br /> // 到達葉子節點<br /> inTreeNode.Text = (inXmlNode.Name).Trim();<br /> inTreeNode.Value = inXmlNode.Attributes["value"].Value;<br /> if (int.Parse(inTreeNode.Value)>0)numofChild++; //記錄節點數目,此步是本次實驗需要而額外記錄的<br /> }<br /> }
二。單擊TreeView節點,另一個panel上的label顯示相應的文本
(1)
簡單起見,這裡將xml簡化:(department.xml)
<?xml version="1.0" encoding="utf-8"?><br /><陽光市教育局 value="-1"></p><p> <教育局概況 value ="0"></p><p> </教育局概況></p><p> <職能部門 value="-1"><br /> <辦公室 value="1" /><br /> <人事科 value="2" /><br /> <基礎教育科 value="3" /><br /> <計財科 value="4" /><br /> <紀檢監察內審室科 value="5" /><br /> <督導室 value="6" /><br /> <教育工會 value="7" /><br /> <招生辦 value="8" /><br /> <工農辦 value="9" /><br /> <勤管站 value="10" /><br /> <教研室 value="11" /><br /> </職能部門></p><p></陽光市教育局>
每單擊一次Treeview的節點,將會從節點中得到不同的節點屬性值(例子中屬性為"value")。
然後在同一工程檔案夾下面儲存了命名與屬性值相對應的txt檔案,因此label的文本也將隨著點擊的情況而變化。
(2)提供增加節點功能,因此得有建立節點相應文本的txt檔案的方法
protected void creatTxtFile(int i)<br />{<br /> string fpath = AppDomain.CurrentDomain.BaseDirectory + "//edu//" + i + ".txt"; //獲得本機工程檔案夾下目錄edu下的路徑<br /> FileStream se1 = new FileStream(fpath, FileMode.Create, FileAccess.Write);</p><p> StreamWriter sw = new StreamWriter(se1, System.Text.Encoding.Default);<br /> sw.Write(resDescribe.Text, Encoding.Default);//使用預設編碼<br /> sw.Close();<br /> }
(3)添加單擊節點的響應函數
protected void Button2_Click(object sender, EventArgs e)<br /> {<br /> if (depName.Text.Trim() == "" || resDescribe.Text.Trim() == "")<br /> {<br /> Response.Write("<mce:script type="text/javascript"><!--<br />window.alert('請把資訊填寫完整' )<br />// --></mce:script>");<br /> }<br /> else if (xmlDoc != null)<br /> {<br /> openXML();<br /> XmlNode root = xmlDoc.GetElementsByTagName("職能部門")[0]; //在指定節點後面添加節點<br /> XmlElement xe1 = xmlDoc.CreateElement(depName.Text);//建立一個<depName.Text>節點<br /> xe1.SetAttribute("value", (++numofChild).ToString());//設定該節點genre屬性<br /> root.AppendChild(xe1);//添加到<>節點中 </p><p> xmlDoc.Save(Server.MapPath("department.xml")); //修改並儲存xml資料</p><p> creatTxtFile(numofChild);<br /> expandTree();<br /> xmlDoc = null;<br /> depName.Enabled = false; //depName,resDescribe為介面控制項textbox<br /> resDescribe.Enabled = false;<br /> }<br /> }
(4)至於如何讀取文本資料,這裡就不多介紹了.
同時這裡並沒有解決如何才能實現局部重新整理頁面的問題,要用到Ajax的知識,等真正學會再說啦。