C#常规操作XML文件案例
前言
在C#中XML还是常见的,而且操作简易,往往用以储存简单数据。
一、XML是什么?
XML是可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
二、使用步骤
1.创建XML文件
用代码创建也是可以,注册头文件即可。
写点内容
2.添加引用
3.窗口布局
4.代码
public partial class Form1 : Form
{
//声明
XmlDocument xmlDocument = new XmlDocument();
XmlNode rootNode = null;
XmlNodeList nodeList = null;
string xmlPath = @"C:\Users\111\source\repos\FileIOText\XmlTest\PosFile.xml";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//加载
XML_Load();
}
private void XML_Load()
{
//加载xml
xmlDocument.Load(xmlPath);
//获取节点posinfo
rootNode = xmlDocument.SelectSingleNode("PosInfo");
nodeList = rootNode.ChildNodes;
//显示
ShowList(nodeList);
}
private void ShowList(XmlNodeList xmlNode)
{
//显示
listView1.Items.Clear();
foreach (XmlNode item in xmlNode)
{
ListViewItem listView = new ListViewItem(item.Attributes[0].InnerText);
listView.SubItems.Add(item.FirstChild.InnerText);
listView.SubItems.Add(item.FirstChild.NextSibling.InnerText);
listView.SubItems.Add(item.FirstChild.NextSibling.NextSibling.InnerText);
listView1.Items.Add(listView);
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
//判断文本框
if (tb1.Text != "" && tbID.Text != "" && tb2.Text != "" && tb3.Text != "")
{
//创建节点pos
XmlElement xmlElement = xmlDocument.CreateElement("pos");
//pos节点pid属性
XmlAttribute xmlAttribute = xmlDocument.CreateAttribute("pid");
//赋值
xmlAttribute.Value = tbID.Text;
//属性添加给pos
xmlElement.Attributes.Append(xmlAttribute);
//添加到PosInfo节点下面
rootNode.AppendChild(xmlElement);
//创建pos1\pos2\pos3节点
XmlElement pos1 = xmlDocument.CreateElement("pos1");
pos1.InnerText = tb1.Text;
XmlElement pos2 = xmlDocument.CreateElement("pos2");
pos2.InnerText = tb2.Text;
XmlElement pos3 = xmlDocument.CreateElement("pos3");
pos3.InnerText = tb3.Text;
//添加到pos节点下面
xmlElement.AppendChild(pos1);
xmlElement.AppendChild(pos2);
xmlElement.AppendChild(pos3);
//保存
xmlDocument.Save(xmlPath);
//加载xml
XML_Load();
MessageBox.Show("添加信息完成");
tbID.Text = tb1.Text = tb2.Text = tb3.Text = "";
}
else
{
MessageBox.Show("内容不能留空");
}
}
private void btnExit_Click(object sender, EventArgs e)
{
//关闭
if (MessageBox.Show("是否关闭软件!", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
this.Close();
}
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count>0)
{
tbID_2.Text = listView1.SelectedItems[0].Text;
tb1_2.Text = listView1.SelectedItems[0].SubItems[1].Text;
tb2_2.Text = listView1.SelectedItems[0].SubItems[2].Text;
tb3_2.Text = listView1.SelectedItems[0].SubItems[3].Text;
}
}
private void btnSet_Click(object sender, EventArgs e)
{
//编号
int num;
ListView.SelectedIndexCollection indexCollection = listView1.SelectedIndices;
if (indexCollection.Count > 0)
{
num = indexCollection[0];
}
else
{
MessageBox.Show("请选择对应ID项!");
return;
}
//判断文本框
if (tb1_2.Text != "" && tbID_2.Text != "" && tb2_2.Text != "" && tb3_2.Text != "")
{
//赋值
XmlNode node = nodeList.Item(num);
node.ChildNodes[0].InnerText = tb1_2.Text;
node.ChildNodes[1].InnerText = tb2_2.Text;
node.ChildNodes[2].InnerText = tb3_2.Text;
//保存
xmlDocument.Save(xmlPath);
//加载xml
XML_Load();
MessageBox.Show("修改信息完成");
tbID_2.Text = tb1_2.Text = tb2_2.Text = tb3_2.Text = "";
}
else
{
MessageBox.Show("内容不能留空");
}
}
private void listView1_DoubleClick(object sender, EventArgs e)
{
//编号
int num;
ListView.SelectedIndexCollection indexCollection = listView1.SelectedIndices;
if (indexCollection.Count > 0)
{
if (MessageBox.Show("是否删除对应消息!","提示", MessageBoxButtons.YesNo)== DialogResult.Yes)
{
num = indexCollection[0];
//索引
XmlNode node = nodeList.Item(num);
//删除
rootNode.RemoveChild(node);
//保存
xmlDocument.Save(xmlPath);
//加载xml
XML_Load();
MessageBox.Show("删除信息完成");
}
}
}
}
5.效果展示
XML操作
总结
XMl结构跟树结构类似,层层相关,利用索引找到对应节点进行增删改操作,修改访问操作也是简单上手,赶紧去尝试吧。