標籤:des style color 使用 os io 檔案 資料
在短暫的C#程式開發過程中,我發現使用xml文檔來儲存一些資料還是很不錯的!當然有了資料當然要讀取,在開發過程我遇到了兩種對xml文檔資料進行讀取的方法。
- 就是最基本的利用System.Xml命名空間,通過各個節點來獲得xml中的資料。
例如下面的Xml資料:
<?xml version="1.0"?><BookStore> <book> <title>C#入門經典</title> <author>Karli Watson</author> <pages>888</pages> </book> <book> <title>長安亂</title> <author>韓寒</author> <pages>260</pages> </book> <book> <title>一座城池</title> <author>韓寒</author> <pages>300</pages> </book> <book> <title>三重門</title> <author>韓寒</author> <pages>280</pages> </book> <book> <title>紅樓夢</title> <author>曹雪芹</author> <pages>1200</pages> </book> <book> <title>三國演義</title> <author>羅貫中</author> <pages>1000</pages> </book> <book> <title>瘋狂的程式員</title> <author>絕影</author> <pages>300</pages> </book> <book> <title>老人與海</title> <author>海明威</author> <pages>190</pages> </book></BookStore>
將這個xml文檔儲存在案頭上,檔案名稱為:“BookStore.xml”,通過遞迴演算法,將每個節點全部得到,再輸出。
static public void ReadXmlByNode() { XmlDocument document = new XmlDocument(); document.Load(FilePath); XmlNode RootNode = document.DocumentElement; //得到根節點 getValue(RootNode); } static public void getValue(XmlNode node) { if (node.ChildNodes.Count == 0) { Console.WriteLine(node.InnerText); } else { foreach (XmlNode ChildNode in node.ChildNodes) { getValue(ChildNode); } } }
這樣就可以將xml中的資料全部輸出,但是這種方式在大批量的輸出的時候得到的資料太亂,不好操作。對於特定(指定)節點進行操作,這個方法是可以的。
- 還有一種辦法是直接將xml文檔轉化為DataTable資料,這樣即使是大批量的資料也可以很好的組織起來,有利於後面程式對資料的操作
static public void ReadXmlByDataSet() { DataSet dataset = new DataSet(); dataset.ReadXml(FilePath, XmlReadMode.Auto); DataTable datatable = dataset.Tables[0]; foreach (DataRow row in datatable.Rows) { for (int i = 0; i < datatable.Columns.Count; i++) { Console.WriteLine(row[i].ToString()); } } }
這個對於標準的xml文檔來說,是很好的一種資料讀取方式。這個方式的缺點在與當xml的節點級數變多以後,就無法將所有的資料全部讀出了。將上面的xml文檔修改一下,改成下面的這個樣子:
<?xml version="1.0"?><BookStore> <book> <title>C#入門經典</title> <author>Karli Watson</author> <pages>888</pages> </book> <book> <title>長安亂</title> <author>韓寒</author> <age>30</age> <sex>男</sex> <nation>漢族</nation> <country>中國</country> <pages>260</pages> </book> <book> <title>一座城池</title> <author>韓寒</author> <pages>300</pages> </book> <book> <title>三重門</title> <author>韓寒</author> <pages>280</pages> </book> <book> <title>紅樓夢</title> <author>曹雪芹</author> <pages>1200</pages> </book> <book> <title>三國演義</title> <author>羅貫中</author> <pages>1000</pages> </book> <book> <title>瘋狂的程式員</title> <author>絕影</author> <pages>300</pages> </book> <book> <title>老人與海</title> <author>海明威</author> <pages>190</pages> </book></BookStore>
對“長安亂”中的作者節點建立了幾個子節點。仍然使用上面的dataset代碼來讀取資料,就會出現問題,但是使用第一種方法,則還是可以將全部資料正常的讀取出來。
上面這些是我對xml文檔暫時的體會,歡迎各位大神指正!