zoukankan      html  css  js  c++  java
  • 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     }

  • 相关阅读:
    枚举enum
    C# 位运算符
    运算符&和&&以及|和||区别比较
    LINQ TO JSON
    LINQ 随机排序
    .NET Core LinQ
    CSharp笔记>>>多线程
    3D旋转
    CSharp 之CSkin的使用教程
    CSharp笔记>>>多语言,注册,模态对话框返回值
  • 原文地址:https://www.cnblogs.com/leee/p/4244549.html
Copyright © 2011-2022 走看看