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

  • 相关阅读:
    Open source cryptocurrency exchange
    Salted Password Hashing
    95. Unique Binary Search Trees II
    714. Best Time to Buy and Sell Stock with Transaction Fee
    680. Valid Palindrome II
    Java compiler level does not match the version of the installed Java project facet.
    eclipse自动编译
    Exception in thread "main" java.lang.StackOverflowError(栈溢出)
    博客背景美化——动态雪花飘落
    java九九乘法表
  • 原文地址:https://www.cnblogs.com/weilengdeyu/p/2802631.html
Copyright © 2011-2022 走看看