C# 创建XML文档
- XML文档知识点
- 创建XML文档
- 向XML中追加
- 读取XML文档
- 读取带属性的XML文档
- 删除节点
XML文档知识点
XML 是可扩展的标记语言
XML:用来存储数据
注意点:XML是严格区分大小写的,XML标签也是成对出现的
XML文档有且只能有一个根节点;
当需要往节点里里面添加标签的时候使用InnerXml,添加文本的时候使用InnerText;
元素包含节点
创建XML文档
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;namespace demo20_0801
{internal class Program{static void Main(string[] args){//通过代码来创建XML文档//1.引用命名空间//2.创建XML文档对象XmlDocument doc = new XmlDocument();//3.创建第一行描述信息,并且添加到doc文档中XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);doc.AppendChild(dec);//4.创建根节点XmlElement books = doc.CreateElement("Books");//将根节点添加到文档中doc.AppendChild(books);//5.给根节点Books创建子节点XmlElement book1 = doc.CreateElement("Book");//将book添加到根节点books.AppendChild(book1);//给book1添加子节点XmlElement name1 = doc.CreateElement("Name");name1.InnerText = "被讨厌的勇气";book1.AppendChild(name1);//给book1添加子节点XmlElement price1 = doc.CreateElement("Price");price1.InnerText = "10";book1.AppendChild(price1);//给book1添加子节点XmlElement disc1 = doc.CreateElement("Disc");disc1.InnerText = "富有哲理且有深度";book1.AppendChild(disc1);//给节点添加属性XmlElement Charactor1 = doc.CreateElement("Charactor");Charactor1.SetAttribute("人物1","大师");Charactor1.SetAttribute("人物2", "学者");book1.AppendChild(Charactor1);//下面两个节点测试了InnerXml和XmlElement test1 = doc.CreateElement("test1");test1.InnerText = "<p>我是一个标签</p>";book1.AppendChild(test1);XmlElement test2 = doc.CreateElement("test2");test2.InnerXml = "<p>我是一个标签</p>";book1.AppendChild(test2);doc.Save("Books.xml");//保存xml文档Console.WriteLine("保存成功");Console.ReadKey();}}
}
创建好的XML文档如下所示:
向XML中追加
追加XML文档,首先要判断XML文档存不存在,存在则加载XML文档并获取根节点,若文件不存在,则创建第一行和根节点。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.IO;namespace demo21_0801
{internal class Program{//追加XML文档static void Main(string[] args){XmlDocument doc = new XmlDocument();XmlElement books;if (File.Exists("Books.xml")){//如果文件存在,加载XMLdoc.Load("Books.xml");//获得文件的根节点books = doc.DocumentElement;}else{//如果文件不存在,创建第一行XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);doc.AppendChild(xmlDeclaration);//创建根节点books = doc.CreateElement("Books");doc.AppendChild(books);}//5.给根节点Books创建子节点XmlElement book1 = doc.CreateElement("Book");//将book添加到根节点books.AppendChild(book1);//给book1添加子节点XmlElement name1 = doc.CreateElement("Name");name1.InnerText = "C#图解教程";book1.AppendChild(name1);XmlElement price1 = doc.CreateElement("Price");price1.InnerText = "10";book1.AppendChild(price1);XmlElement disc1 = doc.CreateElement("Disc");disc1.InnerText = "富有哲理且有深度";book1.AppendChild(disc1);doc.Save("Books.xml");Console.WriteLine("保存成功");Console.ReadKey();}}
}
读取XML文档
读取上述XML文档
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.IO;namespace demo22_0801
{internal class Program{static void Main(string[] args){//读取XML文档XmlDocument doc = new XmlDocument();doc.Load("Books.xml");//获取文档的根节点XmlElement books = doc.DocumentElement;//获得子节点,返回节点的集合XmlNodeList xmlNodeList = books.ChildNodes;foreach (XmlNode xmlNode in xmlNodeList){Console.WriteLine(xmlNode.InnerText);}Console.ReadKey();}}
}
打印出来的内容如下所示:
读取带属性的XML文档
如果读取带有属性的XML文档,文档内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Books><Book><Charactor name1="大师" name2="学者" /></Book>
</Books>
读取带有属性的XML文档的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.IO;namespace demo23_0801
{internal class Program{//读取节点的属性值static void Main(string[] args){XmlDocument doc = new XmlDocument();doc.Load("Books.xml");//选择节点:XmlNodeList xmlNodeList = doc.SelectNodes("/Books/Book/Charactor");foreach (XmlNode node in xmlNodeList){Console.WriteLine(node.Attributes["name1"].Value);Console.WriteLine(node.Attributes["name2"].Value);}Console.ReadKey();}}
}
控制台显示内容如下:
删除节点
要删除的XML文档内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Books><Book><Name>C#图解教程</Name><Price>10</Price><Disc>富有哲理且有深度</Disc></Book>
</Books>
删除节点代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;namespace demo24_0801
{internal class Program{static void Main(string[] args){XmlDocument doc = new XmlDocument();doc.Load("Books.xml");XmlNode xmlNode = doc.SelectSingleNode("/Books/Book");//删除Book下面的所有子节点xmlNode.RemoveAll();doc.Save("Books.xml");Console.WriteLine("删除成功");Console.ReadKey();}}
}
删除后的XML文档内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Books><Book></Book>
</Books>