版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36981814/article/details/86679079
一、利用DOM(文档对象模型)写入一个XML文件
static void Main(string[] args)
{
//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 book1 = doc.CreateElement("Book");
//将子节点book1添加到根节点下
books.AppendChild(book1);
//7、给book1添加子节点
XmlElement bookName1 = doc.CreateElement("BookName");
bookName1.InnerText = "水浒传";
book1.AppendChild(bookName1);
XmlElement author1 = doc.CreateElement("Author");
author1.InnerText = "小明";
book1.AppendChild(author1);
XmlElement price1 = doc.CreateElement("Price");
price1.InnerXml = "100RMB";
book1.AppendChild(price1);
XmlElement des1 = doc.CreateElement("Des");
des1.InnerXml = "非常好看";
book1.AppendChild(des1);
Console.WriteLine("保存成功");
doc.Save("Book.xml");
Console.ReadKey();
}
xml文档结果:
<?xml version="1.0" encoding="utf-8"?>
<Books>
<Book>
<BookName>水浒传</BookName>
<Author>小明</Author>
<Price>100RMB</Price>
<Des>非常好看</Des>
</Book>
</Books>
二、添加带属性的XML文档
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
XmlElement order = doc.CreateElement("Order");
doc.AppendChild(order);
XmlElement customerName = doc.CreateElement("CustomerName");
customerName.InnerXml = "刘洋";
order.AppendChild(customerName);
XmlElement orderNumber = doc.CreateElement("OrderNumber");
orderNumber.InnerXml = "10000";
order.AppendChild(orderNumber);
XmlElement items = doc.CreateElement("Items");
order.AppendChild(items);
XmlElement orderItem1 = doc.CreateElement("OrderItem");
orderItem1.SetAttribute("Name", "码表");
orderItem1.SetAttribute("Count", "100001");
items.AppendChild(orderItem1);
XmlElement orderItem2 = doc.CreateElement("OrderItem");
orderItem2.SetAttribute("Name", "雨衣");
orderItem2.SetAttribute("Count", "1");
items.AppendChild(orderItem2);
XmlElement orderItem3 = doc.CreateElement("OrderItem");
orderItem3.SetAttribute("Name", "手套");
orderItem3.SetAttribute("Count","1");
items.AppendChild(orderItem3);
doc.Save("Order.xml");
Console.WriteLine("保存成功");
Console.ReadKey();
}
xml文档结果:
<?xml version="1.0" encoding="utf-8"?>
<Order>
<CustomerName>刘洋</CustomerName>
<OrderNumber>10000</OrderNumber>
<Items>
<OrderItem Name="码表" Count="100001" />
<OrderItem Name="雨衣" Count="1" />
<OrderItem Name="手套" Count="1" />
</Items>
</Order>
三、DOM方式创建XML对象
static void Main(string[] args)
{
List<Student> list = new List<Student>();
list.Add(new Student() { ID = 1, Name = "玉米", Gender = '男', Age = 30 });
list.Add(new Student() { ID = 2, Name = "王者", Gender = '女', Age = 20 });
list.Add(new Student() { ID = 3, Name = "刘华", Gender = '男', Age = 50 });
list.Add(new Student() { ID = 4, Name = "张校", Gender = '男', Age = 60 });
list.Add(new Student() { ID = 5, Name = "哥哥", Gender = '男', Age = 10 });
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
XmlElement person = doc.CreateElement("Person");
doc.AppendChild(person);
//通过循环List集合,获得所有对象 以节点的形式添加到XML文档中
for (int i = 0; i < list.Count; i++)
{
XmlElement student = doc.CreateElement("Student");
student.SetAttribute("studentID", list[i].ID.ToString());
XmlElement name = doc.CreateElement("Name");
name.InnerXml = list[i].Name;
XmlElement age = doc.CreateElement("Age");
age.InnerXml = list[i].Age.ToString();
XmlElement gender = doc.CreateElement("Gender");
gender.InnerXml = list[i].Gender.ToString();
//添加
person.AppendChild(student);
student.AppendChild(name);
student.AppendChild(age);
student.AppendChild(gender);
}
doc.Save("Student.xml");
Console.WriteLine("保存成功");
Console.ReadKey();
}
class Student
{
public int Age { get; set; }
public string Name { get; set; }
public int ID { get; set; }
public char Gender { get; set; }
}
xml文档结果:
<?xml version="1.0" encoding="utf-8"?>
<Person>
<Student studentID="1">
<Name>玉米</Name>
<Age>30</Age>
<Gender>男</Gender>
</Student>
<Student studentID="2">
<Name>王者</Name>
<Age>20</Age>
<Gender>女</Gender>
</Student>
<Student studentID="3">
<Name>刘华</Name>
<Age>50</Age>
<Gender>男</Gender>
</Student>
<Student studentID="4">
<Name>张校</Name>
<Age>60</Age>
<Gender>男</Gender>
</Student>
<Student studentID="5">
<Name>哥哥</Name>
<Age>10</Age>
<Gender>男</Gender>
</Student>
</Person>
四、对xml文档实现增删改查
4.1追加内容
#region 对xml文档实现追加的需求
XmlDocument doc = new XmlDocument();
//首先判断xml文档是否存在 如果存在 则追加 否则创建一个
if (File.Exists("Student.xml"))
{
//加载进来
doc.Load("Student.xml");
//获得根节点 给根节点添加子节点
XmlElement person = doc.DocumentElement;
XmlElement student = doc.CreateElement("Student");
student.SetAttribute("studentID", "01");
XmlElement name = doc.CreateElement("Name");
name.InnerXml = "李思思";
XmlElement age = doc.CreateElement("Age");
age.InnerXml = "18";
XmlElement gender = doc.CreateElement("Gender");
gender.InnerXml = "女";
//添加
person.AppendChild(student);
student.AppendChild(name);
student.AppendChild(age);
student.AppendChild(gender);
}
else
{
//不存在
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
XmlElement person = doc.CreateElement("Person");
XmlElement student = doc.CreateElement("Student");
student.SetAttribute("studentID", "110");
XmlElement name = doc.CreateElement("Name");
name.InnerXml = "张三三";
XmlElement age = doc.CreateElement("Age");
age.InnerXml = "28";
XmlElement gender = doc.CreateElement("Gender");
gender.InnerXml = "男";
//添加
doc.AppendChild(person);
person.AppendChild(student);
student.AppendChild(name);
student.AppendChild(age);
student.AppendChild(gender);
}
doc.Save("Student.xml");
Console.WriteLine("保存成功");
4.2读取xml文档内容、修改
#region 读取XML文档(读取所有节点)
XmlDocument doc = new XmlDocument();
doc.Load("order.xml");//xml文件名不区分大小写
//获得根节点
XmlElement order = doc.DocumentElement;
//获得根节点的所有子节点
XmlNodeList xnl = order.ChildNodes;
//使用下述方法则无法读取子节点的属性
foreach (XmlNode item in xnl)
{
Console.WriteLine(item.InnerText);
}
XmlElement items = order["Items"];
XmlNodeList xnl2 = items.ChildNodes;
foreach (XmlNode item in xnl2)
{
Console.WriteLine(item.Attributes["Name"].Value);
Console.WriteLine(item.Attributes["Count"].Value);
//通过一下方式可以实现对指定属性的更改
if (item.Attributes["Name"].Value == "手套")
{
item.Attributes["Count"].Value = "New123";
}
}
doc.Save("OrDER.xml");
Console.ReadKey();
#endregion
#region 使用XPath的方式来读取XML文件(读取一个节点)
XmlDocument doc = new XmlDocument();
doc.Load("order.xml");
//获得根节点
XmlElement order = doc.DocumentElement;
//获得某一个节点
XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']");
//输出
Console.WriteLine(xn.Attributes["Name"].Value);
//为该节点赋予新值
xn.Attributes["Count"].Value = "New1000";
doc.Save("order.xml");
Console.WriteLine("保存成功");
Console.ReadKey();
#endregion
4.3删除
XmlDocument doc = new XmlDocument();
doc.Load("order.xml");
//doc.RemoveAll();注意:不行,根节点不允许删除
XmlElement order = doc.DocumentElement;
//order.RemoveAll();移除根节点下的所有子节点
XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']");
XmlNode orderItem = order.SelectSingleNode("/Order/Items/OrderItem");
XmlNode items = order["Items"];//order.SelectSingleNode("/Order/Items"); 两种都可以
//items.RemoveChild(xn);//移除当前整个节点
xn.Attributes.RemoveNamedItem("Count");//移除当前节点某个属性
doc.Save("order.xml");
Console.WriteLine("删除成功");
Console.ReadKey();
五、实例:使用XML实现增删改查
通过简单实例实现xml文件的增删改查,效果图如下: