介紹<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
本文中我將介紹在ASP.NET應用程序中如何讀取XML文件,這是一個十分有用的技巧。使用這個技巧,我們能夠定製我們的應用程序的配置文件,也可以讀取那些保存在XML文件中的數據。
概論
下面的代碼將使用XmlTextReader對象將磁盤文件中的數據讀取到XmlDocument對象中。XmlTextReader對象在功能上和StreamReader及BinaryReader對象十分相似,只不過它是專爲讀取XML文件而特別設計的。除此以外,XmlTextReader對象還有其他一些與XMl相關的特性。例如,代碼中使用到的WhitespaceHandling屬性告訴應用程序不要爲XML文件中多餘的空格建立節點。
下面的代碼使用XmlTextReader對象的DocumentElement屬性來查找XML文檔的樹狀表達形式的根節點。之後,遞歸地調用AddWithChildren方法將將節點及它的子節點一同添加到listbox中。
下面的代碼還包含了屬性的處理。屬性節點並不包含在一個XmlDocument對象的節點的子節點集合中。因而,你只能使用XmlNode對象的Attributes屬性獲得屬性節點集合。獲取了屬性節點集合後,代碼使用XmlNamedNodeMap對象來保存這個集合。這個對象能夠保存任何類型的XmlNode對象的任何集合。
代碼列表
private void btnLoad_Click(object sender, System.EventArgs e) { XmlTextReader reader = new XmlTextReader( Server.MapPath("mycompany.xml"));
reader.WhitespaceHandling = WhitespaceHandling.None; XmlDocument xmlDoc = new XmlDocument(); //將文件加載到XmlDocument對象中 xmlDoc.Load(reader); //關閉連接 reader.Close(); //向listbox中添加代表文檔的元素 lbNodes.Items.Add("XML Document"); //查找根節點,並將它及它的子節點一同添加到listbox中 XmlNode xnod = xmlDoc.DocumentElement; AddWithChildren(xnod,1); }
private void AddWithChildren(XmlNode xnod, Int32 intLevel) { //將節點及它的子節點一同添加到listbox中 //intLevel 控制縮進的深度 XmlNode xnodWorking; String strIndent = new string(' ',2 * intLevel); //如果節點有值,讀取它的值 string strValue = (string) xnod.Value; if(strValue != null) { strValue = " : " + strValue; } //將節點的詳細信息添加到ListBox中 lbNodes.Items.Add(strIndent + xnod.Name + strValue); //如果是元素節點,獲取它的屬性 if (xnod.NodeType == XmlNodeType.Element) { XmlNamedNodeMap mapAttributes = xnod.Attributes; //將節點屬性添加到ListBox中 foreach(XmlNode xnodAttribute in mapAttributes) { lbNodes.Items.Add(strIndent + " " + xnodAttribute.Name + " : " + xnodAttribute.Value); } //如果還有子節點,就遞歸地調用這個程序 if(xnod.HasChildNodes) { xnodWorking = xnod.FirstChild; while (xnodWorking != null) { AddWithChildren(xnodWorking, intLevel +1); xnodWorking = xnodWorking.NextSibling; } } } } } |