Windows课上的一个小实验,虽然不是很难,但是做了好久……因此分享出来,希望对大家有所帮助。
这里展示对bookstore.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;
using System.IO;
using System.Collections;
namespace xml_text
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listView1.GridLines = true;
listView1.FullRowSelect = true;
}
private void Form1_Load(object sender, EventArgs e)
{
//ListView
//XML
//加载xml文件
listView1.View = View.Details;
listView1.Columns.Clear();
listView1.Items.Clear();
listView1.Columns.Add("title", 50, HorizontalAlignment.Center);
listView1.Columns.Add("author", 50, HorizontalAlignment.Center);
listView1.Columns.Add("price", 50, HorizontalAlignment.Center);
listView1.Columns.Add("ISBN", 100, HorizontalAlignment.Center);
listView1.Columns.Add("stype", 50, HorizontalAlignment.Center);
ShowXML();
}
public void addlv(string name,string author,string price)
{
ListViewItem item = new ListViewItem();
item.SubItems[0].Text = (listView1.Items.Count + 1).ToString();
item.SubItems.Add(name);
item.SubItems.Add(author);
item.SubItems.Add(price);
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
public class XMLr
{
string title;
public string Title
{
get { return title; }
set { title = value; }
}
string genre;
public string Genre
{
get { return genre; }
set { genre = value; }
}
string price;
public string Price
{
get { return price; }
set { price = value; }
}
string author;
public string Author
{
get
{
return author;
}
set
{
author = value;
}
}
string ISBN;
public string IS
{
get { return ISBN; }
set { ISBN = value; }
}
public void ReadXML()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode docNode = xmlDoc.DocumentElement;
XmlNode objNode = docNode.FirstChild;
foreach (XmlNode allNode in objNode.ChildNodes)
{
if (allNode.Name == "ISBN")
{
ISBN = allNode.InnerText;
}
if (allNode.Name == "genre")
{
genre = allNode.InnerText;
}
if (allNode.Name == "title")
{
title = allNode.InnerText;
}
if (allNode.Name == "author")
{
author = allNode.InnerText;
}
if (allNode.Name == "price")
{
price = allNode.InnerText;
}
}
}
}
//添加书目
private void button1_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\windows_projects\xml2.0\xml_text\bin\Debug\bookstore.xml");
XmlNode x = xmlDoc.SelectSingleNode("bookstore");
XmlElement xel = xmlDoc.CreateElement("book");
xel.SetAttribute("genre", textBox5.Text);
xel.SetAttribute("ISBN", textBox4.Text);
XmlElement xesub1 = xmlDoc.CreateElement("title");
xesub1.InnerText = textBox1.Text;
if(textBox1.Text=="")
{
MessageBox.Show("添加失败,书名不能为空!");
return;
}
xel.AppendChild(xesub1);
XmlElement xesub2 = xmlDoc.CreateElement("author");
xesub2.InnerText = textBox2.Text;
xel.AppendChild(xesub2);
XmlElement xesub3 = xmlDoc.CreateElement("price");
xesub3.InnerText = textBox3.Text;
xel.AppendChild(xesub3);
x.AppendChild(xel);
xmlDoc.Save("bookstore.xml");
MessageBox.Show("添加成功");
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
textBox5.Clear();
ShowXML();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void ShowXML() //显示xml数据
{
listView1.View = View.Details;
listView1.Items.Clear();
string path = "bookstore.xml"; //xml的文件位置
XmlDocument xmlDoc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true; //忽略xml文档中的注释
XmlReader reader = XmlReader.Create(path, settings);
xmlDoc.Load(reader); //读取xml数据
XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
XmlNodeList xnl = xn.ChildNodes;
List<XMLr> stsList = new List<XMLr>();
//循环遍历获取xml文档中的全部数据
foreach (XmlNode Xnl in xnl)
{
XMLr filesAuto = new XMLr();
filesAuto.Genre = Xnl.Attributes["genre"].Value;
filesAuto.IS = Xnl.Attributes["ISBN"].Value;
XmlElement xe1 = (XmlElement)Xnl;
XmlNodeList xnl0 = xe1.ChildNodes;
filesAuto.Title = xnl0.Item(0).InnerText;
filesAuto.Author = xnl0.Item(1).InnerText;
filesAuto.Price = xnl0.Item(2).InnerText;
ListViewItem list = listView1.Items.Add(filesAuto.Title);
list.SubItems.Add(filesAuto.Author);
list.SubItems.Add(filesAuto.Price);
list.SubItems.Add(filesAuto.IS);
list.SubItems.Add(filesAuto.Genre);
}
reader.Close(); //关闭读取流
}
private void button2_Click(object sender, EventArgs e)
{
ShowXML();
}
//搜索节点
private void button3_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\windows_projects\xml2.0\xml_text\bin\Debug\bookstore.xml");
XmlNodeList xnl = xmlDoc.SelectNodes("//book");
foreach (XmlNode xn in xnl)
{
if (xn.SelectSingleNode("title").InnerText.Equals(textBox6.Text))
{
ListViewItem list = listView1.Items.Add(xn.SelectSingleNode("title").InnerText);
list.SubItems.Add(xn.SelectSingleNode("author").InnerText);
list.SubItems.Add(xn.SelectSingleNode("price").InnerText);
list.SubItems.Add(xn.Attributes["ISBN"].Value);
list.SubItems.Add(xn.Attributes["genre"].Value);
}
}
}
//删除节点
private void button4_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\windows_projects\xml2.0\xml_text\bin\Debug\bookstore.xml");
var root = xmlDoc.DocumentElement;
if (this.listView1.SelectedItems.Count>0)
{
//在xml删除选中项 只删除一
XmlNodeList xnl = xmlDoc.SelectNodes("//book");
foreach (XmlNode xn in xnl)
{
string title = listView1.SelectedItems[0].SubItems[0].Text.ToString();
if (xn.SelectSingleNode("title").InnerText.Equals(title))
{
root.RemoveChild(xn);
xmlDoc.Save("bookstore.xml");
int index = listView1.SelectedItems[0].Index;
listView1.Items[index].Remove();
ShowXML();
MessageBox.Show("删除成功!");
return;
}
}
}
else
{
MessageBox.Show("请选中一项!");
}
}
private void button5_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\windows_projects\xml2.0\xml_text\bin\Debug\bookstore.xml");
var root = xmlDoc.DocumentElement;
if (this.listView1.SelectedItems.Count > 0)
{
XmlNodeList xnl = xmlDoc.SelectNodes("//book");
foreach (XmlNode xn in xnl)
{
string title = listView1.SelectedItems[0].SubItems[0].Text.ToString();
if (xn.SelectSingleNode("title").InnerText.Equals(title))
{
textBox1.Text = xn.SelectSingleNode("title").InnerText;
textBox2.Text= xn.SelectSingleNode("author").InnerText;
textBox3.Text = xn.SelectSingleNode("price").InnerText;
textBox4.Text = xn.Attributes["ISBN"].Value;
textBox5.Text = xn.Attributes["genre"].Value;
return;
}
}
}
else
{
MessageBox.Show("请选中一项!");
}
}
private void label3_Click(object sender, EventArgs e)
{
}
private void button6_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\windows_projects\xml2.0\xml_text\bin\Debug\bookstore.xml");
var root = xmlDoc.DocumentElement;
if (this.listView1.SelectedItems.Count > 0)
{
XmlNodeList xnl = xmlDoc.SelectNodes("//book");
foreach (XmlNode xn in xnl)
{
string title = listView1.SelectedItems[0].SubItems[0].Text.ToString();
if (xn.SelectSingleNode("title").InnerText.Equals(title))
{
xn.SelectSingleNode("title").InnerText = textBox1.Text;
xn.SelectSingleNode("author").InnerText = textBox2.Text;
xn.SelectSingleNode("price").InnerText = textBox3.Text;
xn.Attributes["ISBN"].Value = textBox4.Text;
xn.Attributes["genre"].Value = textBox5.Text;
xmlDoc.Save("bookstore.xml");
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
textBox5.Clear();
ShowXML();
MessageBox.Show("修改成功");
return;
}
}
}
}
}
}
结果展示:
所操作的XML文档
操作视频:
xml