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     }

  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/leee/p/4244549.html
Copyright © 2011-2022 走看看