可扩展标记语言(extensible Markup language)
序列化:把一个对象转成二进制
反序列化:把二进制转换成对象
创建XML文档
//1、创建一个XML文档 XmlDocument doc = new XmlDocument(); //2、创建第一行描述信息 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null); //3、将创建的第一行数据添加到文档中 doc.AppendChild(dec); //4、创建根元素 XmlElement books = doc.CreateElement("Books"); //5、添加根元素到文档 doc.AppendChild(books); //6、创建子元素 XmlElement book = doc.CreateElement("Book"); //7、添加子元素到跟元素 books.AppendChild(book); //8、创建子元素属性 XmlElement name1 = doc.CreateElement("Name"); name1.InnerText = "水浒传"; //9、添加属性到子元素 book.AppendChild(name1); //10、保存 doc.Save("Books.xml");
下面是创建的XML文档
<?xml version="1.0" encoding="utf-8"?> <Books> <Book> <Name>水浒传</Name> </Book> </Books>
添加带属性的XML文档
//1、创建一个XML文档 XmlDocument doc = new XmlDocument(); //2、创建第一行描述信息 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null); //3、将创建的第一行数据添加到文档中 doc.AppendChild(dec); //4、创建根元素 XmlElement books = doc.CreateElement("Books"); //5、添加根元素到文档 doc.AppendChild(books); //6、创建子元素 XmlElement book = doc.CreateElement("Book"); book.SetAttribute("Name","西游记");//这是设置属性 //7、添加子元素到跟元素 books.AppendChild(book); doc.Save("Books.xml");
下面是创建的XML文档
<?xml version="1.0" encoding="utf-8"?> <Books> <Book Name="西游记" /> </Books>
文档对象模型
建一个类,跟XML属性一致
声明类集合,添加对象
遍历集合,写入XML文档
XML文档增删改查
#region 创建XML XmlDocument doc = new XmlDocument(); //首先判断xml文档是否存在,如果存在,则追加,否则创建一个 if (File.Exists("Books.xml")) { //加载进来 doc.Load("Books.xml"); //获得根节点,给子节点追加 XmlElement books = doc.DocumentElement; XmlElement book = doc.CreateElement("Book"); book.SetAttribute("Id", "1"); books.AppendChild(book); XmlElement name = doc.CreateElement("Name"); name.InnerXml = "水浒传"; book.AppendChild(name); } else { //不存在 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null); doc.AppendChild(dec); XmlElement books = doc.CreateElement("Books"); doc.AppendChild(books); XmlElement book = doc.CreateElement("Book"); book.SetAttribute("Id", "01"); books.AppendChild(book); XmlElement name = doc.CreateElement("Name"); name.InnerXml = "西游记"; book.AppendChild(name); } doc.Save("Books.xml"); #endregion #region 查询XML //元素查询 XmlDocument doc = new XmlDocument(); doc.Load("Books.xml"); XmlElement books = doc.DocumentElement; XmlNodeList xnl = books.ChildNodes; foreach (XmlNode item in xnl) { //获取元素内容 Console.WriteLine(item.InnerText); } //属性查询 XmlDocument doc = new XmlDocument(); doc.Load("Books.xml"); XmlElement books = doc.DocumentElement; XmlNodeList xnl2 = books.ChildNodes; foreach (XmlNode item in xnl2) { //获取属性值 Console.WriteLine(item.Attributes["Id"].Value); if (item.Attributes["Id"].Value == "1") { //修改XML item.Attributes["Id"].Value = "001"; } } //使用XPath的方式来读取XML文件 XmlDocument doc = new XmlDocument(); doc.Load("Books.xml"); XmlElement books = doc.DocumentElement; XmlNode xnl = books.SelectSingleNode("/Books/Book/Name"); Console.WriteLine(xnl.InnerText); //使用XPath的方式来读取XML文件属性值 XmlDocument doc = new XmlDocument(); doc.Load("Books.xml"); XmlElement books = doc.DocumentElement; XmlNode xnl = books.SelectSingleNode("/Books/Book[@Id='001']"); Console.WriteLine(xnl.InnerText); #endregion #region 删除XML //删除文件,除根节点外,xml文件不允许没有根节点 XmlDocument doc = new XmlDocument(); doc.Load("Books.xml"); XmlElement books = doc.DocumentElement; books.RemoveAll(); doc.Save("Books.xml"); //删除XML节点 XmlDocument doc = new XmlDocument(); XmlElement books = doc.DocumentElement; XmlNode xn = books.SelectSingleNode("/Books/Book[@Id='001']"); XmlNode items = books["Name"];//books.SelectSingleNode("/Books/Book/Name"); items.RemoveChild(xn);//只能是直系父级删除子节点 doc.Save("Books.xml"); //删除节点属性 XmlDocument doc = new XmlDocument(); XmlElement books = doc.DocumentElement; XmlNode xn = books.SelectSingleNode("/Books/Book[@Id='001']"); xn.Attributes.RemoveNamedItem("Id"); doc.Save("Books.xml"); #endregion
所操作的XML文档
<?xml version="1.0" encoding="utf-8"?> <Books> <Book Id="001"> <Name>水浒传</Name> </Book> </Books>