Linq to xml实现xml数据增删改查

Contact.cs类:

 public class Contact
    {
        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public string Company { get; set; }

        public string City { get; set; }

        public string Telephone { get; set; }

        public string Fax { get; set; }

        public string Email { get; set; }
    }

LinqXmlContactsBLManager.cs

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;

namespace LinqXmlContactsBLL
{
    public class LinqXmlContactsBLManager
    {
        public List<Contact> GetAllContacts()
        {
            XDocument xmlDocument = XDocument.Load("Contacts.xml");

            IEnumerable<XElement> xmlContacts = xmlDocument.Element("Contacts")
                .Elements("Contact");

            List<Contact> contacts = new List<Contact>();

            //获取联系人列表
            foreach (XElement i in xmlContacts)
            {
                Contact contact = new Contact();

                contact.Id = int.Parse(i.Attribute("Id").Value);
                contact.FirstName = i.Element("FirstName").Value;
                contact.LastName = i.Element("LastName").Value;
                contact.Company = i.Element("Company").Value;
                contact.City = i.Element("City").Value;
                contact.Telephone = i.Element("Telephone").Value;
                contact.Fax = i.Element("Fax").Value;
                contact.Email = i.Element("Email").Value;

                contacts.Add(contact);
            }

            return contacts;
        }

        public Contact GetContactById(int id)
        {
            XDocument xmlDocument = XDocument.Load("Contacts.xml");

            XElement xmlContact = xmlDocument.Element("Contacts").Elements("Contact")
                .Where(a => a.Attribute("Id").Value == id.ToString()).FirstOrDefault();

            Contact contact = new Contact();


            contact.Id = int.Parse(xmlContact.Attribute("Id").Value);
            contact.FirstName = xmlContact.Element("FirstName").Value;
            contact.LastName = xmlContact.Element("LastName").Value;
            contact.Company = xmlContact.Element("Company").Value;
            contact.City = xmlContact.Element("City").Value;
            contact.Telephone = xmlContact.Element("Telephone").Value;
            contact.Fax = xmlContact.Element("Fax").Value;
            contact.Email = xmlContact.Element("Email").Value;

            return contact;
        }

        public void AddContact(Contact contact)
        {
            XDocument xmlDocument = XDocument.Load("Contacts.xml");

            //将值插入联系人xml文档
            xmlDocument.Element("Contacts").Add(
                new XElement("Contact",
                    new XAttribute("Id", contact.Id),
                    new XElement("FirstName", contact.FirstName),
                    new XElement("LastName", contact.LastName),
                    new XElement("Company", contact.Company),
                    new XElement("City", contact.City),
                    new XElement("Telephone", contact.Telephone),
                    new XElement("Fax", contact.Fax),
                    new XElement("Email", contact.Email)
                    ));

            xmlDocument.Save("Contacts.xml");
        }

        public void UpdateContact(Contact contact)
        {
            XDocument xmlDocument = XDocument.Load("Contacts.xml");

            //通过ID更新联系人
            XElement xmlContact = xmlDocument.Element("Contacts").Elements("Contact")
                .Where(x => x.Attribute("Id").Value == contact.Id.ToString())
                .FirstOrDefault();

            //更新联系人
            xmlContact.SetElementValue("FirstName", contact.FirstName);
            xmlContact.SetElementValue("LastName", contact.LastName);
            xmlContact.SetElementValue("Company", contact.Company);
            xmlContact.SetElementValue("City", contact.City);
            xmlContact.SetElementValue("Telephone", contact.Telephone);
            xmlContact.SetElementValue("Fax", contact.Fax);
            xmlContact.SetElementValue("Email", contact.Email);

            xmlDocument.Save("Contacts.xml");
        }

        public void DeleteContact(int id)
        {
            XDocument xmlDocument = XDocument.Load("Contacts.xml");

            //得到联系人并删除他
            xmlDocument.Root.Elements().Where(x => x.Attribute("Id").Value == id.ToString())
                .FirstOrDefault().Remove();

            xmlDocument.Save("Contacts.xml");
        }

        public int GetNextId()
        {
            int currentId;
            XDocument xmlDocument = XDocument.Load("Contacts.xml");

            //获取id的集合
            IEnumerable<int> contactIds = xmlDocument.Element("Contacts").Elements("Contact")
                .Select(x => int.Parse(x.Attribute("Id").Value));

            //如果集合为空,则将变量设置为0,否则将该变量设置为最高ID值
            if (contactIds.Count() == 0)
                currentId = 0;
            else
                currentId = contactIds.Max();

            return currentId + 1;
        }

        public void SetXmlFile()
        {
            //如果xml文件丢失,则使用根元素创建它
            if (!(File.Exists("Contacts.xml")))
            {
                XDocument xmlDocument = new XDocument(
                    new XDeclaration("1.0", "utf-8", "yes"),
                    new XElement("Contacts"));

                xmlDocument.Save("Contacts.xml");
            }
        }

        public bool IdExists(int id)
        {
            XDocument xmlDocument = XDocument.Load("Contacts.xml");

            return xmlDocument.Element("Contacts").Elements("Contact")
                .Select(x => int.Parse(x.Attribute("Id").Value))
                .Where(y => y == id).Count() > 0;
        }
    }
}

主窗体frmMain.cs

  public partial class frmMain : Form
    {
        LinqXmlContactsBLManager blManager = new LinqXmlContactsBLManager();

        public frmMain()
        {
            InitializeComponent();

            //如果xml文件丢失,创建它
            blManager.SetXmlFile();
            dataGridView1.DataSource = blManager.GetAllContacts();
        }

        private void btnViewContact_Click(object sender, EventArgs e)
        {
            if (txtId.Text == "")
            {
                MessageBox.Show("请输入ID", "消息");
                txtId.Focus();
                return;
            }
            int x;
            if (!int.TryParse(txtId.Text, out x))
            {
                MessageBox.Show("请输入有效的ID", "消息");
                txtId.Focus();
                txtId.SelectAll();
                return;
            }
            if (!blManager.IdExists(int.Parse(txtId.Text)))
            {
                MessageBox.Show("id " + txtId.Text + " 不存在", "消息");
                txtId.Focus();
                txtId.SelectAll();
                return;
            }

            //通过id获得一个联系人
            Contact contact = blManager.GetContactById(int.Parse(txtId.Text));

            //show the contact properties on the controls
            lblId.Text = contact.Id.ToString();
            txtFirstName.Text = contact.FirstName;
            txtLastName.Text = contact.LastName;
            txtCompany.Text = contact.Company;
            txtCity.Text = contact.City;
            txtTelephone.Text = contact.Telephone;
            txtFax.Text = contact.Fax;
            txtEmail.Text = contact.Email;

            txtId.Clear();
        }

        private void btnNewContact_Click(object sender, EventArgs e)
        {
            frmAdd frmAdd1 = new frmAdd();
            frmAdd1.ShowDialog();
            dataGridView1.DataSource = blManager.GetAllContacts();
        }

        private void btnUpdateContact_Click(object sender, EventArgs e)
        {
            if (lblId.Text == "")
            {
                MessageBox.Show("未选择联系人", "消息");
                txtId.Focus();
                txtId.SelectAll();
                return;
            }
            if (txtFirstName.Text == "")
            {
                MessageBox.Show("请输入姓氏", "消息");
                txtFirstName.Focus();
                return;
            }
            if (txtLastName.Text == "")
            {
                MessageBox.Show("请输入名", "消息");
                txtLastName.Focus();
                return;
            }
            if (txtCompany.Text == "")
            {
                MessageBox.Show("请输入公司", "消息");
                txtCompany.Focus();
                return;
            }
            if (txtCity.Text == "")
            {
                MessageBox.Show("请输入城市", "消息");
                txtCity.Focus();
                return;
            }
            if (txtTelephone.Text == "")
            {
                MessageBox.Show("请输入电话", "消息");
                txtTelephone.Focus();
                return;
            }
            if (txtFax.Text == "")
            {
                MessageBox.Show("请输入传真", "消息");
                txtFax.Focus();
                return;
            }
            if (txtEmail.Text == "")
            {
                MessageBox.Show("请输入邮件", "消息");
                txtEmail.Focus();
                return;
            }

            //创建一个联系人,并从控件值设置他的属性
            Contact contact = new Contact()
            {
                Id = int.Parse(lblId.Text),
                FirstName = txtFirstName.Text,
                LastName = txtLastName.Text,
                Company = txtCompany.Text,
                City = txtCity.Text,
                Telephone = txtTelephone.Text,
                Fax = txtFax.Text,
                Email = txtEmail.Text
            };

            //更新联系人
            blManager.UpdateContact(contact);
            dataGridView1.DataSource = blManager.GetAllContacts();
        }

        private void btnDeleteContact_Click(object sender, EventArgs e)
        {
            if (lblId.Text == "")
            {
                MessageBox.Show("未选择联系人", "消息");
                txtId.Focus();
                txtId.SelectAll();
                return;
            }

            Contact contact = blManager.GetContactById(int.Parse(lblId.Text));

            string messageToPrint = "The following contact will get deleted:\n\n" +
                "Id : " + contact.Id.ToString() + "\n" +
                "First name : " + contact.FirstName + "\n" +
                "Last name : " + contact.LastName + "\n" +
                "Company : " + contact.Company + "\n" +
                "City : " + contact.City + "\n" +
                "Telephone : " + contact.Telephone + "\n" +
                "Fax : " + contact.Fax + "\n" +
                "Email : " + contact.Email + "\n\n" +
                "Are you sure?";

            DialogResult dialogResult = MessageBox.Show(messageToPrint, "Message", 
                MessageBoxButtons.YesNo);

            //如果用户点击“否”,则取消删除操作
            if (dialogResult == DialogResult.No)
            {
                MessageBox.Show("操作被取消", "消息");
                return;
            }

            //如果用户点击“是”,删除联系人
            blManager.DeleteContact(contact.Id);

            dataGridView1.DataSource = blManager.GetAllContacts();

            //清除控件值
            lblId.Text = "";
            txtFirstName.Clear();
            txtLastName.Clear();
            txtCompany.Clear();
            txtCity.Clear();
            txtTelephone.Clear();
            txtFax.Clear();
            txtEmail.Clear();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }

增加窗体frmAdd.cs

  public partial class frmAdd : Form
    {
        LinqXmlContactsBLManager blManager = new LinqXmlContactsBLManager();

        public frmAdd()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (txtFirstName.Text == "")
            {
                MessageBox.Show("请输入姓氏", "消息");
                txtFirstName.Focus();
                return;
            }
            if (txtLastName.Text == "")
            {
                MessageBox.Show("请输入名字", "消息");
                txtLastName.Focus();
                return;
            }
            if (txtCompany.Text == "")
            {
                MessageBox.Show("请输入公司", "消息");
                txtCompany.Focus();
                return;
            }
            if (txtCity.Text == "")
            {
                MessageBox.Show("请输入城市", "消息");
                txtCity.Focus();
                return;
            }
            if (txtTelephone.Text == "")
            {
                MessageBox.Show("请输入电话", "消息");
                txtTelephone.Focus();
                return;
            }
            if (txtFax.Text == "")
            {
                MessageBox.Show("请输入传真", "消息");
                txtFax.Focus();
                return;
            }
            if (txtEmail.Text == "")
            {
                MessageBox.Show("请输入电子邮件", "消息");
                txtEmail.Focus();
                return;
            }

            //创建联系人,并从控件中为属性设置值
            int id = blManager.GetNextId();
            Contact contact = new Contact()
            {
                Id = id,
                FirstName = txtFirstName.Text,
                LastName = txtLastName.Text,
                Company = txtCompany.Text,
                City = txtCity.Text,
                Telephone = txtTelephone.Text,
                Fax = txtFax.Text,
                Email = txtEmail.Text
            };

            //添加联系人
            blManager.AddContact(contact);

            //清除控件值
            txtFirstName.Clear();
            txtLastName.Clear();
            txtCompany.Clear();
            txtCity.Clear();
            txtTelephone.Clear();
            txtFax.Clear();
            txtEmail.Clear();

            txtFirstName.Focus();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            Close();
        }
    }

运行结果如图:

这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值