1.什么是xml?
Xml(Extensible Markup Language),可扩展标记语言,一种用于存储数据或传输数据的标记语言,由万维网(W3C开发)。它允许开发人员创建自己的标记,且简单易读,易扩展,支持标准的字符编码,如UFT-8,UTF-16.
2. Xml文档的基本结构
2.1文档声明,包括文档版本(version)、编码格式(encoding).
<?xml version = “1.0”,encoding = “UTF-8”?>
2.2根元素(root element)
Xml文档必须包含一个根元素,其是xml文档所有元素的父元素,如:
<root>
<!--其他元素-->
</root>
2.3元素(element)
是xml文档的基本单位,包含文本和属性,元素用标签来标识,由<p>开始,</p>结束,如:
<p>这是一个段落</p>
2.4属性(property)
属性是元素的附加信息,属性在开始标签中定义,并以键值对的形式出现.如:
<p link = “www.baidu.com”这是一个链接/p>
2.5注释(Comment)
注释用于在xml文档中添加解释和说明,格式以<!--
开始,以-->
结束, 如下:
<!--这是我的注释-->
3.C#对xml文档的抽象
C#对xml文件进行了结构的抽象,支持xml文档的创建、读、写等操作.
3.1 xml文档被抽象成XmlDocument对象,Xml文档对象可以用XmlReader和XmlWriter类对xml文件对象进行读写
3.2 xml文档的元素
被抽象为XmlElement对象,这些对象包含了元素的名称,属性,子元素
3.3 xml文档的属性
XmlAttribute包含了元素的属性名称和值
3.4Xml文档的文本内容
XmlText对象访问文本内容
3.5xml节点处理
XmlNodelist,XmlNodeReader,XmlNodeWriter,用于xml文档的节点列表,读取,写入xml节点.
以上的类都在System.Xml命名空间下,需要引入.
4.创建xml文件的demo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;namespace _1.创建xml
{class Program{static void Main(string[] args){XmlDocument doc = new XmlDocument();//定义xml声明信息XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);//xml声明信息添加到文档对象下doc.AppendChild(dec);//给xml文档声明行添加注释doc.AppendChild(doc.CreateComment("line above is the declaration for the xml document"));//创建根元素的注释XmlNode com = doc.CreateComment("line below is the root element");doc.AppendChild(com);//创建根节点XmlElement root = doc.CreateElement("Root");//将创建的Root元素添加到xml文档的根节点中doc.AppendChild(root);//循环添加多个结构相同的节点int subnodeCnt = 6;//定义随机数对象,用于产生年龄Random rdm = new Random();for (int i = 0; i < subnodeCnt; i++){//创建当前元素的注释XmlComment comment = doc.CreateComment($"这是第{i + 1}个子节点");//将注释添加到root下面root.AppendChild(comment);//创建当前元素XmlElement element = doc.CreateElement($"学生{i + 1}");//给当前元素添加属性,如果当前元素没有ID属性,则添加ID属性;如果当前元素有ID属性,则更新ID属性的值element.SetAttribute("ID", $"{i + 100}");//给当前元素添加子元素,描述学生姓名信息XmlElement name = doc.CreateElement("name");name.InnerText = $"学生{i+1}";element.AppendChild(name);//给当前元素添加子节点,描述学生的年龄信息XmlElement age = doc.CreateElement("Age");age.InnerText = $"{rdm.Next(12, 19)}";element.AppendChild(age);//创建当前元素到根目录下root.AppendChild(element);}doc.Save(@"D:\dwang\myxml.xml");}}
}
.5.读取xml文档demo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;namespace _2.读取x_m_l
{class Program{static void Main(string[] args){int i = 1;string path = $@"D:\dwang\myxml{i}.xml";XmlDocument doc = new XmlDocument();doc.Load(path);//获取根节点XmlElement root = doc.DocumentElement;//获取子节点(XmlNode是xmlElement,xmlComment的父类)foreach (XmlNode student in root.ChildNodes){//忽略xml文件中的注释节点(XmlComment)if (student as XmlElement == null)continue;Console.Write($"{student.Name}--{((XmlElement)student).GetAttribute("name")}");foreach (XmlElement subnode in student.ChildNodes){Console.Write($"--{subnode.Name}--{subnode.InnerText}");}Console.Write("\r\n");}Console.ReadKey();}}
}
6.修改xml文档的demo,包括更新节点,添加节点,删除节点等.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace _3.修改xml
{class Program{static void Main(string[] args){//添加节点,修改节点,删除节点XmlDocument doc = new XmlDocument();//加载xml文档string path = $@"D:\dwang\myxml1.xml";doc.Load(path);//获取根节点XmlElement root = doc.DocumentElement;//获取根节点名称string name_RootNode = root.Name;//添加节点XmlElement newStudent = doc.CreateElement("newStuent");//设置newStuent元素的属性newStudent.SetAttribute("ID", "888");//添加newStuent元素的子节点name,ageXmlElement name = doc.CreateElement("name");name.InnerText = "newstuentName";newStudent.AppendChild(name);XmlElement age = doc.CreateElement("age");age.InnerText = "68";newStudent.AppendChild(age);//将新学生元素添加到根节点最后一个子元素后面root.InsertAfter(newStudent, root.ChildNodes[root.ChildNodes.Count-1]);//删除指定的节点两种常用方式(XPath)//删除指定的节点两种常用方式(XPath)//方式1XmlNode node1 = doc.SelectSingleNode(@"/Root/学生1");//注意节点的大小写,否则会找不到节点XmlNode node1_parent = node1?.ParentNode;node1_parent?.RemoveChild(node1);//获取指定的节点后,要用该节点的父节点对象删除该节点//方式2XmlNode node = root.SelectSingleNode("//学生2");if(node != null)root?.RemoveChild(node);//更新xml节点信息//获取指定节点元素XmlElement student3 = doc.SelectSingleNode(@"/Root/学生3") as XmlElement;//更新ID属性值student3?.SetAttribute("ID", "000001");//设置当前节点的指定子节点的innerTextif (student3 != null){student3["Age"].InnerText = "28";student3["name"].InnerText = "Student--3";}//保存xml文档doc.Save(path);}}
}