XML文件的写,集合XML序列化(写)。XML文件的读,递归遍历
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 }
知识没有高低贵贱之分。