小編給大家分享一下XML數(shù)據(jù)讀取方式有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、雅安服務器托管、營銷軟件、網(wǎng)站建設、伊州網(wǎng)站維護、網(wǎng)站推廣。測試開始先讀取XML源,用一個比較大的rss文件鏈接,復制到項目bin/debug目錄下。
Stream xmlStream = new MemoryStream(File.ReadAllBytes(path));
一、XmlDocument 方式
代碼
1 static IList testXmlDocument() 2 { 3 var doc = new XmlDocument(); 4 doc.Load(xmlStream); 5 var nodeList = doc.DocumentElement.ChildNodes; 6 var lstChannel = new List<Object>(nodeList.Count ); 7 foreach (XmlNode node in nodeList) 8 { 9 var channel = new 10 { 11 Title = node.SelectSingleNode("title").InnerText, 12 Link = node.SelectSingleNode("link").InnerText, 13 Description = node.SelectSingleNode("description").InnerText, 14 Content = node.SelectSingleNode("content").InnerText, 15 PubDate = node.SelectSingleNode("pubDate").InnerText, 16 Author = node.SelectSingleNode("author").InnerText, 17 Category = node.SelectSingleNode("category").InnerText 18 }; 19 lstChannel.Add(channel); 20 } 21 return lstChannel; 22 }
二、XPathNavigator 方式
代碼
1 static IList testXmlNavigator() 2 { 3 var doc = new XmlDocument(); 4 doc.Load(xmlStream); 5 var nav = doc.CreateNavigator(); 6 nav.MoveToRoot(); 7 var nodeList = nav.Select("/channel/item"); 8 var lstChannel = new List<Object>(nodeList.Count); 9 foreach (XPathNavigator node in nodeList) 10 { 11 var channel = new 12 { 13 Title = node.SelectSingleNode("title").Value, 14 Link = node.SelectSingleNode("link").Value, 15 Description = node.SelectSingleNode("description").Value, 16 Content = node.SelectSingleNode("content").Value, 17 PubDate = node.SelectSingleNode("pubDate").Value, 18 Author = node.SelectSingleNode("author").Value, 19 Category = node.SelectSingleNode("category").Value 20 }; 21 lstChannel.Add(channel); 22 } 23 return lstChannel; 24 }
三、XmlTextReader 方式
代碼
1 static List<Channel> testXmlReader() 2 { 3 var lstChannel = new List<Channel>(); 4 var reader = XmlReader.Create(xmlStream); 5 while (reader.Read()) 6 { 7 if (reader.Name == "item" && reader.NodeType == XmlNodeType.Element) 8 { 9 var channel = new Channel(); 10 lstChannel.Add(channel); 11 while (reader.Read()) 12 { 13 if (reader.Name == "item") break; 14 if (reader.NodeType != XmlNodeType.Element) continue; 15 switch (reader.Name) 16 { 17 case "title": 18 channel.Title = reader.ReadString(); 19 break; 20 case "link": 21 channel.Link = reader.ReadString(); 22 break; 23 case "description": 24 channel.Description = reader.ReadString(); 25 break; 26 case "content": 27 channel.Content = reader.ReadString(); 28 break; 29 case "pubDate": 30 channel.PubDate = reader.ReadString(); 31 break; 32 case "author": 33 channel.Author = reader.ReadString(); 34 break; 35 case "category": 36 channel.Category = reader.ReadString(); 37 break; 38 default: 39 break; 40 } 41 } 42 } 43 } 44 return lstChannel; 45 }
四、Linq to XML 方式
代碼
1 static IList testXmlLinq() 2 { 3 var xd = XDocument.Load(xmlStream); 4 var list = from node in xd.Elements("channel").Descendants("item") 5 select new 6 { 7 Title = node.Element("title").Value, 8 Link = node.Element("link").Value, 9 Description = node.Element("description").Value, 10 Content = node.Element("content").Value, 11 PubDate = node.Element("pubDate").Value, 12 Author = node.Element("author").Value, 13 Category = node.Element("category").Value 14 }; 15 return list.ToList(); 16 }
測試結果:
XmlDocment 47ms XPathNavigator 42ms XmlTextReader 23ms Xml Linq 28ms
小結一下自己的認識,XmlDocument的操作基本按W3C的DOM操作方式,不過要將全部節(jié)點解析成對象加載到內存中,往往造成很大浪費。所以微軟自己的編程規(guī)范也不推薦用它。這里由于讀取了所有節(jié)點,可能因此性能和Navigator方式相差不大。在三種隨機讀取方式中,Xml Linq性能最高,只是方法名有點別扭。XmlTextReader方式是所謂的SAX,只讀向前,無疑性能最高,不過實現(xiàn)上麻煩了不少,要比較精確的控制訪問邏輯,也無法用匿名類存儲數(shù)據(jù)。
.Net 3.5發(fā)布Xml Linq可以很好地取代前兩種方式,通常情況下,最好用它。只有個別場合,如果對性能要求極高,或者讀取Xml數(shù)據(jù)量太大不能一下子下載或讀取到內存中,那就只好痛苦委身于XmlTextReader了。
以上是XML數(shù)據(jù)讀取方式有哪些的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享標題:XML數(shù)據(jù)讀取方式有哪些-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://jinyejixie.com/article2/ddspoc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、網(wǎng)站建設、軟件開發(fā)、ChatGPT、網(wǎng)站設計、面包屑導航
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)