C#操作XML的方法

时间:2023-03-10 01:09:17
C#操作XML的方法

添加命名空间:

using System.Xml;

1,先创建一个BookModel类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace xmllianxi
{
class BookModel
{
/// <summary>
/// 所对应的课程类型
/// </summary>
private string bookType;
public string BookType
{
get { return bookType; }
set { bookType = value; }
}
/// <summary>
/// 书所对应的ISBN号
/// </summary>
private string bookISBN;
public string BookISBN
{
get { return bookISBN; }
set { bookISBN = value; }
}
/// <summary>
/// 书名
/// </summary>
private string bookName;
public string BookName
{
get { return bookName; }
set { bookName = value; }
}
/// <summary>
/// 作者
/// </summary>
private string bookAuthor;
public string BookAuthor
{
get { return bookAuthor; }
set { bookAuthor = value; }
}
/// <summary>
/// 价格
/// </summary>
private double bookPrice;
public double BookPrice
{
get { return bookPrice; }
set { bookPrice = value; }
}
/// <summary>
/// flag
/// </summary>
private string bookFlag;
public string BookFlag
{
get { return bookFlag; }
set { bookFlag = value; }
}
}
}

2,创建xml文件,及增删改查xml文件:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml; namespace xmllianxi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button5_Click(object sender, EventArgs e)//创建xml
{
XmlDocument doc = new XmlDocument();
//加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>
XmlDeclaration xmldecl;
xmldecl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(xmldecl);
//加入一个根元素
XmlElement xe = doc.CreateElement("", "bookstore", "");
doc.AppendChild(xe); //加入另外一个元素
XmlNode xn1 = doc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElement xel1 = doc.CreateElement("book");//创建一个<book>节点
xel1.SetAttribute("Type", "必修课");//设置该节点genre属性
xel1.SetAttribute("ISBN", "1-1");//设置该节点ISBN属性
//创建子结点
XmlElement xelName1 = doc.CreateElement("title");
xelName1.InnerText = "C#从入门到精通";
XmlElement xelAuthor1 = doc.CreateElement("author");
xelAuthor1.InnerText = "张三";
XmlElement xelPrice1 = doc.CreateElement("price");
xelPrice1.InnerText = "";
xel1.AppendChild(xelName1);
xel1.AppendChild(xelAuthor1);
xel1.AppendChild(xelPrice1);
xn1.AppendChild(xel1); //加入另外一个元素
XmlNode xn2 = doc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElement xel2 = doc.CreateElement("book");//创建一个<book>节点
xel2.SetAttribute("Type", "必修课");//设置该节点genre属性
xel2.SetAttribute("ISBN", "1-2");//设置该节点ISBN属性
//创建子结点
XmlElement xelName2 = doc.CreateElement("title");
xelName2.InnerText = "C#基础";
XmlElement xelAuthor2 = doc.CreateElement("author");
xelAuthor2.InnerText = "李四";
XmlElement xelPrice2 = doc.CreateElement("price");
xelPrice2.InnerText = "";
xel2.AppendChild(xelName2);
xel2.AppendChild(xelAuthor2);
xel2.AppendChild(xelPrice2);
xn2.AppendChild(xel2); //加入另外一个元素
XmlNode xn3 = doc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElement xel3 = doc.CreateElement("book");//创建一个<book>节点
xel3.SetAttribute("Type", "必修课");//设置该节点genre属性
xel3.SetAttribute("ISBN", "1-3");//设置该节点ISBN属性
//创建子结点
XmlElement xelName3 = doc.CreateElement("title");
xelName3.InnerText = "Unity3D基础";
XmlElement xelAuthor3 = doc.CreateElement("author");
xelAuthor3.InnerText = "王五";
XmlElement xelPrice3 = doc.CreateElement("price");
xelPrice3.InnerText = "";
xel3.AppendChild(xelName3);
xel3.AppendChild(xelAuthor3);
xel3.AppendChild(xelPrice3);
xn3.AppendChild(xel3); //加入另外一个元素
XmlNode xn4 = doc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElement xel4 = doc.CreateElement("book");//创建一个<book>节点
xel4.SetAttribute("Type", "必修课");//设置该节点genre属性
xel4.SetAttribute("ISBN", "1-4");//设置该节点ISBN属性
//创建子结点
XmlElement xelName4 = doc.CreateElement("title");
xelName4.InnerText = "计算机基础";
XmlElement xelAuthor4 = doc.CreateElement("author");
xelAuthor4.InnerText = "赵六";
XmlElement xelPrice4 = doc.CreateElement("price");
xelPrice4.InnerText = "";
xel4.AppendChild(xelName4);
xel4.AppendChild(xelAuthor4);
xel4.AppendChild(xelPrice4);
xn4.AppendChild(xel4); //保存创建好的XML文档
doc.Save(@"\Book.xml");
Select();
} public void Select()
{
//使用XmlDocument读取XML文件
XmlDocument doc = new XmlDocument();
doc.Load(@"\Book.xml");
XmlNode xn = doc.SelectSingleNode("bookstore");// 得到根节点bookstore
XmlNodeList nodelist = xn.ChildNodes;// 得到根节点的所有子节点
List<BookModel> bookModeList = new List<BookModel>();
foreach (XmlNode xn1 in nodelist)
{
BookModel bookModel = new BookModel();
XmlElement xe = (XmlElement)xn1;// 将节点转换为元素,便于得到节点的属性值
bookModel.BookType = xe.GetAttribute("Type").ToString();// 得到Type的属性值
bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
// 得到Book节点的所有子节点
XmlNodeList xml = xe.ChildNodes;
bookModel.BookName = xml.Item().InnerText;
bookModel.BookAuthor = xml.Item().InnerText;
bookModel.BookPrice = Convert.ToDouble(xml.Item().InnerText); if (xml.Item() != null)
{
bookModel.BookFlag = xml.Item().InnerText;
} bookModeList.Add(bookModel);
}
dataGridView1.DataSource = bookModeList;
} private void button1_Click(object sender, EventArgs e)
{
Select();
} private void button2_Click(object sender, EventArgs e)//增加
{
//加载文件并选出根结点
XmlDocument doc = new XmlDocument();
doc.Load(@"\Book.xml");
XmlNode xn = doc.SelectSingleNode("bookstore"); //用上面的方法,是向已有的文件上追加数据,如果想覆盖原有的所有数据,使用LoadXml方法
//直接把根结点选择出来了,后面不用SelectSingleNode方法选择根结点,直接创建结点即可
//XmlDocument doc = new XmlDocument();
//doc.LoadXml("<bookstore></bookstore>");//用这句话,会把以前的数据全部覆盖掉,只有你增加的数据 XmlElement xel = doc.CreateElement("book");//创建一个book结点
xel.SetAttribute("Type", "必修课");//设置节点属性
xel.SetAttribute("ISBN", "1-10");
//创建子结点
XmlElement xelName = doc.CreateElement("title");
xelName.InnerText = "数据库基础";
XmlElement xelAuthor = doc.CreateElement("author");
xelAuthor.InnerText = "李老头";
XmlElement xelPrice = doc.CreateElement("price");
xelPrice.InnerText = "";
xel.AppendChild(xelName);
xel.AppendChild(xelAuthor);
xel.AppendChild(xelPrice);
//最后把book结点挂接在根结点上,并保存整个文件
xn.AppendChild(xel);
doc.Save(@"\Book.xml");
Select();
} private void button3_Click(object sender, EventArgs e)//删除
{
XmlDocument doc = new XmlDocument();
doc.Load(@"\Book.xml");
XmlNode xn = doc.SelectSingleNode("bookstore");// 得到根节点bookstore
XmlNodeList nodelist = xn.ChildNodes;// 得到根节点的所有子节点
for (int i = ; i < nodelist.Count; i++)
{
XmlElement xe = (XmlElement)nodelist.Item(i);
if (xe.GetAttribute("ISBN") == "1-10")
{
xn.RemoveChild(xe);
if (i < nodelist.Count)
i = i - ;
}
}
doc.Save(@"\Book.xml");
Select();
} private void button4_Click(object sender, EventArgs e)//修改
{
XmlDocument doc = new XmlDocument();
doc.Load(@"\Book.xml");
XmlNodeList nodeList = doc.SelectSingleNode("bookstore").ChildNodes;//获取根节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn; //将子节点类型转换为XmlElement类型
if (xe.GetAttribute("ISBN") == "1-4")
{
xe.SetAttribute("ISBN", "update 1-4");
XmlNodeList xnls = xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach (XmlNode xn1 in xnls)
{
XmlElement xe2 = (XmlElement)xn1;
if (xe2.Name == "author")
{
xe2.InnerText = "赵老头";
break;
}
}
break;
}
}
doc.Save(@"\Book.xml");
Select();
} private void button6_Click(object sender, EventArgs e)//添加一个子节点
{
XmlDocument doc = new XmlDocument();
doc.Load(@"\Book.xml");
XmlNodeList nodeList = doc.SelectSingleNode("bookstore").ChildNodes;//获取根节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn; //将子节点类型转换为XmlElement类型
//创建子结点
XmlElement xelFlag = doc.CreateElement("flag");
xelFlag.InnerText = "";
xe.AppendChild(xelFlag);
}
doc.Save(@"\Book.xml");
Select();
} private void button7_Click(object sender, EventArgs e)//删除一个子节点
{
XmlDocument doc = new XmlDocument();
doc.Load(@"\Book.xml");
XmlNodeList nodeList = doc.SelectSingleNode("bookstore").ChildNodes;//获取根节点的所有子节点
foreach (XmlNode xn in nodeList)
{
XmlElement xe = (XmlElement)xn;
XmlNodeList xnl = xe.ChildNodes;//获取xe子节点的所有子节点
foreach (XmlNode xn1 in xnl)//遍历
{
XmlElement xe2 = (XmlElement)xn1;//转换类型
if (xe2.Name == "flag")//如果找到
{
xe.RemoveChild(xe2);//则删除
}
}
}
doc.Save(@"\Book.xml");
Select();
}
}
}