在開(kāi)發(fā)過(guò)程中,我們有時(shí)會(huì )需要保存到本地一些結構化數據或者配置信息,這時(shí)就可以選擇用xml文件。當然xml的用途也不僅僅是這些。

這一篇來(lái)談一談關(guān)于讀取xml文件的幾種方式;
我們有以下兩個(gè)文件,一個(gè)是帶有id屬性的,一個(gè)是不帶屬性的簡(jiǎn)單xml文件。
<?xml version="1.0" encoding="utf-8" ?><studentList><student><name>張三</name><sex>男</sex><old>20</old></student><student><name>李四</name><sex>女</sex><old>21</old></student></studentList>
<?xml version="1.0" encoding="utf-8" ?><studentList><student><name id="1">張三</name><sex id="11">男</sex><old id="111">20</old></student><student><name id="2">李四</name><sex id="22">女</sex><old id="222">21</old></student></studentList>
第一種方式:DataSet讀取
這種方式最簡(jiǎn)單,而且取數據也很方便,但是對于比較復雜的xml,操作起來(lái)也很麻煩,每一個(gè)帶屬性的節點(diǎn)都會(huì )生成一個(gè)table,可以自行監視下DataSet的結構情況,然后做不同的處理
//xml文件路徑string xmlPath = Application.StartupPath + "\\Student.xml";//不帶屬性string xmlPaths = Application.StartupPath + "\\Students.xml";//帶屬性//dataset讀取簡(jiǎn)單xml文件DataSet ds = new DataSet();ds.ReadXml(xmlPath);//讀取第一條數據的name節點(diǎn)string name = ds.Tables[0].Rows[0]["name"].ToString();//輸出:張三Console.WriteLine(name);//dataset讀取帶屬性的xml文件ds = new DataSet();ds.ReadXml(xmlPaths);//讀取的節點(diǎn)名稱(chēng)string nodeName = "name";name = ds.Tables[nodeName].Rows[0][nodeName+"_Text"].ToString();//讀取節點(diǎn)的id屬性string id = ds.Tables[nodeName].Rows[0]["id"].ToString();//輸出:id:1,name:張三Console.WriteLine("id:{0},name:{1}",id,name);
第二種方式:XmlDocument
這種方式就很強大并且靈活了,根據節點(diǎn)順序逐步獲取就可以
//需導入命名空間using System.Xml;//XmlDocument讀取xml文件XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(xmlPaths);//獲取xml根節點(diǎn)XmlNode xmlRoot = xmlDoc.DocumentElement;//根據節點(diǎn)順序逐步讀取//讀取第一個(gè)name節點(diǎn)name = xmlRoot.SelectSingleNode("student/name").InnerText;//讀取節點(diǎn)的id屬性id = xmlRoot.SelectSingleNode("student/name").Attributes["id"].InnerText;//輸出:id:1,name:張三Console.WriteLine("id:{0},name:{1}", id, name);//讀取所有的name節點(diǎn)foreach (XmlNode node in xmlRoot.SelectNodes("student/name")){//循環(huán)輸出Console.WriteLine("id:{0},name:{1}", node.Attributes["id"].InnerText, node.InnerText);}
第三種方式:JSON.NET
使用JSON.NET可以將xml轉換成json去操作
如果是對xml文件進(jìn)行操作的話(huà),個(gè)人不太建議使用這種方式;
需要引入Newtonsoft.Json.dll,使用時(shí)請注意版本,低版本可能不支持
//需導入命名空間using Newtonsoft.Json;using Newtonsoft.Json.Linq;//XmlDocument讀取xml文件xmlDoc = new XmlDocument();xmlDoc.Load(xmlPaths);//轉換為jsonstring json = JsonConvert.SerializeXmlNode(xmlDoc);//解析jsonJObject jobj = JObject.Parse(json);JArray jarr = JArray.Parse(jobj["studentList"]["student"].ToString());//輸出:id:1,name:張三Console.WriteLine("id:{0},name:{1}", jarr[0]["name"]["#text"], jarr[0]["name"]["@id"]);
簡(jiǎn)單的xml文件個(gè)人推薦使用第一種,復雜點(diǎn)的使用第二種,具體可以根據需求選擇。
由簡(jiǎn)入繁,拿來(lái)即用
后續精彩,持續關(guān)注
聯(lián)系客服