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     }

原文地址:https://www.cnblogs.com/leee/p/4244549.html