在我们讨论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常用方法:
其实两种方式大同小异,这里我们讨论通过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核心图