XML和XML序列化金典

在我们讨论XML的用法之前,还是来看下XML的概念。

XML Extensible  Markup  Language(可扩展标记语言),是W3C推荐的标准,用来传输和存储数据。XML应用非常广泛,是各种应用程序之间进行数据传输最常用的工具。.NET的核心就是XML,XML是微软.NET战略的一个重要组成部分,.NET框架(ASP.NET、Web Service等)都使用XML作为数据表现形式。

      接下来就XML的常用知识点我们做一个罗列。

 1,为什么学习XML

XML具有易读、易用、结构化的特点,所以我们经常通过XML传输数据。

 2.XML语法规范

标签(Tag):

001.名称的开头必须是字母、”_”或“:”,但冒号不推荐使用。

    002.名称中不能含有空格。

003.名称中还可以包含英文字母、数字、”_”、”-”和”.”.

004.必须有根标记,且根标记必须唯一

005.标签配对使用

006.标签区分大小写
    嵌套(Nest):标记必须合理嵌套,不能交错使用。

    属性(Attribute)

    属性语法:属性名=”属性值”

 3.XML结构(XML树)

    类似于树状结构:XML可以具有父节点、子节点和兄弟节点。

 4.如何手写一个XML文件?

首先,要对XML进行声明:<?xml  version=”1.0”  encoding=”gb2312”  ?>

XML中注释:<!-- -->

书写XML常用方法:

  1. 通过DOM方式(文档对象模型)
  2. Linq  to  XML

其实两种方式大同小异,这里我们讨论通过Linq  to XML方式实现XML的书写。

 常用类型

    XElement、XDocument、XAttribute、XNode。

 使用代码写XML文件

001.创建XML文档

        XDocument doc = new XDocument();

002.创建一个根节点XElement,在构造方法中定义节点名字

XElement xRoot = new XElement("root");

003.加到XML文档中

doc.Add(xRoot);

004.添加属性

      //加班级属性

            XElement xClass = new XElement("class");

            XAttribute xDisplay = new XAttribute("display", ".NET");

            xClass.Add(xDisplay);

 

      //加学生属性

            XElement xPerson = new XElement("Person");

            XAttribute xP = new XAttribute("id", "0001");

            xPerson.Add(xP);

     005.添加节点

          //学生的各个数据

            XElement xName = new XElement("name");

            xName.Value = "李晓玲";

            XElement xAge = new XElement("age");

            xAge.Value = "18";

            XElement xGender = new XElement("gender");

            xGender.Value = "男";

 

            //加到对应的属性上去

            xPerson.Add(xName);

            xPerson.Add(xAge);

            xPerson.Add(xGender);

 

            xClass.Add(xPerson);

            xRoot.Add(xClass);

    006.通过Save方法保存数据

           doc.Save("MyFirst.xml");

上面我们讲述了如何手写一个XML文件,接下来我们来看下如何读取XML文件

5.读取XML文件

    01.加载文档

      通过XDocument.Load()方法

         XDocument doc= XDocument.Load("MyFirst.xml");

       02.获取根节点

              通过Root属性

       XElement root= doc.Root;

      03.获取元素标签名与值

       foreach (XElement ele in root.Elements())

           {

               string xClass = ele.Name.ToString();

               string sid = ele.Attribute("display").Value;

               Console.WriteLine("{0}{1}",xClass,sid);

               foreach (XElement item in ele.Elements())

               {

                   string xName = item.Name.ToString();

                   string id = item.Attribute("id").Value;

                   string name = item.Element("name").Value;

                   string age = item.Element("age").Value;

                   string gender = item.Element("gender").Value;

                   Console.WriteLine("{0}{1}{2}{3}{4}\t",xName,id,name,age,gender);

 

               }

           }

     6.XML序列化

  那么如何将内存中的对象序列化成XML文件呢?

  我们可以使用XML序列化器,首先要引入命名空间,

using System.Xml.Serialization;

  如下是生成将一个List<Person>序列化成XML文件的代码

     private void button1_Click(object sender, EventArgs e)

        {

            List<Person> list = new List<Person>();

            list.Add(new Person("成龙",18,'男'));

            list.Add(new Person("李小龙",25,'男'));

            list.Add(new Person("巩俐",30,'女'));

            //下面开始序列化

            XmlSerializer xml = new XmlSerializer(typeof(List<Person>));

            FileStream fs = new FileStream("Weilengdeyu.xml",FileMode.OpenOrCreate);

            xml.Serialize(fs, list);

 

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

           // MessageBox.Show(typeof(List<Person>).ToString());

        }

    }

    [Serializable]

    public class Person

    {

        public Person(string name, int age, char gender)

        {

            this.name = name;

            this.age = age;

            this.gender = gender;

        }

        public Person()

        {

 

        }

        private char gender;

 

        public char Gender

        {

            get { return gender; }

            set { gender = value; }

        }

        private int age;

 

        public int Age

        {

            get { return age; }

            set { age = value; }

        }

        private string name;

 

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

  7.最后给大家贡献一张X-DOM核心图

原文地址:https://www.cnblogs.com/weilengdeyu/p/2802631.html