XML文件:必須要有一個節點。檢驗xml文件,可以用瀏覽器打開,能打開表示對,否則錯。
處理方法:
DOM:XmlDocument文檔對象模型
Sax(事件驅動,XmlReader)
XmlSerializer(序列化):可以序列化一個類,一個泛型集合。
Linq to XML:主要用到類:Xelement XDocument XAttribute using System.Xml.Linq;
寫一個XML文件:
學校,班級,學生(性別,年齡,年齡)
1 namespace W_R_XML_Model 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 {//創建文檔 7 XDocument xdoc=new XDocument(); 8 //此文檔必須包含一個根節點,節點名為()內的名字,並不是變量名。 9 XElement xx=new XElement("xuexiao"); 10 xdoc.Add(xx); 11 //創建節點 12 XElement xbanji=new XElement("banji"); 13 XElement xxuesheng=new XElement("xuesheng"); 14 XElement xxingming=new XElement("xingming"); 15 XElement xxingbie=new XElement("xingbie"); 16 XElement xgender=new XElement("gender"); 17 //根據哪些節點在哪個節點下,添加節點.同一級別的節點可以以數組形式一塊添加到父節點 add,添加屬性也是add,不過先newXAttribute 18 xxuesheng.Add(xxingming,xxingbie,xgender); 19 xbanji.Add(xxuesheng); 20 xx.Add(xbanji); 21 //為節點賦值 .value 22 //xxuesheng.Value = "李可"; 23 xxingming.Value = "李可"; 24 xxingbie.Value = "男"; 25 xgender.Value = "23"; 26 //為節點添加屬性,先創建屬性XAttribute 27 XAttribute xuexiaoAttribute=new XAttribute("id",00001); 28 xx.Add(xuexiaoAttribute); 29 XAttribute banjiAttribute=new XAttribute("id",02); 30 xbanji.Add(banjiAttribute); 31 XAttribute xueshengAttribute=new XAttribute("id",024); 32 xxuesheng.Add(xueshengAttribute); 33 34 //保存文件 35 xdoc.Save("lizi.xml"); 36 } 37 } 38 }
序列化(把泛型集合寫一個xml文件):常常導出數據庫為XMl文檔的方法,可以先建立一個集合。但是此種方法,一次性將所有數據添加到list內存,數據大的時候就用XmlReader,和XmlWriter。
1 namespace W_R_XML_Model 2 { 3 //先標記,再public 4 [Serializable] 5 public class onePerson 6 { 7 public string Name { get; set; } 8 public int Age { get; set; } 9 public char Gender { get; set; } 10 } 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 List<onePerson> list = new List<onePerson>//集合初始化器可以省去() 16 { 17 new onePerson {Name = "李可", Age = 18, Gender = '男'},//對象初始化器可以省去() 18 new onePerson {Name = "小翠", Age = 20, Gender = '女'}, 19 new onePerson {Name = "小紅", Age = 17, Gender = '女'} 20 }; 21 //把這個泛型集合序列化成XML格式的文件 22 using (FileStream file = new FileStream("lisxm.xml", FileMode.Create, FileAccess.Write)) 23 { 24 //找一個人來序列化 參數 序列化的類型, 25 XmlSerializer serializer = new XmlSerializer(typeof(List<onePerson>)); 26 //序列化的對象和目的文件流 27 serializer.Serialize(file, list); 28 } 29 } 30 } 31 }
男女對應的unicode代碼30007,22899
讀取XML文檔;
獲得文檔。XDocment.Load(路徑)
獲得根節點下的所有子節點。Xelement.root
循環子節點,獲得子節點下的子節點。
1 namespace W_R_XML_Model 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 {//獲得文檔 7 XDocument xDocument = XDocument.Load("xmllianxi.xml"); 8 //獲得該文檔的根節點 9 XElement xroot= xDocument.Root; 10 // 將根節點帶入遍歷函數 11 fun(xroot); 12 Console.ReadKey(); 13 } 14 public static void fun(XElement eles) 15 {//eles.elements一個節點的下的節點集合,並一個一個查看,比如根節點下的幾個節點 16 foreach (var eleVar in eles.Elements()) 17 {//如果這些集合元素還有子節點hasElements,則繼續將此幾點遞歸查詢,直到沒有子節點 18 if (eleVar.HasElements) 19 { 20 fun(eleVar); 21 } 22 else 23 { 24 Console.WriteLine(eleVar.Value); 25 } 26 } 27 } 28 }