C#实现XML文档的增删改查

1、 创建实例XML文件(Books.xml)

<?xml version="1.0" encoding="iso-8859-1"?>
<bookstore>
  <book id="1" category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book id="2" category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book id="3" category="WEB">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book id="4" category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>
2、 创建图书信息实体类(BookInfo.cs)
public class BookInfo
{
    /// <summary>
    /// 图书ID
    /// </summary>
    public int BookId { set; get; }

    /// <summary>
    /// 图书名称
    /// </summary>
    public string Title { set; get; }

    /// <summary>
    /// 图书分类
    /// </summary>
    public string Category { set; get; }

    /// <summary>
    /// 图书语言
    /// </summary>
    public string Language { set; get; }

    /// <summary>
    /// 图书作者
    /// </summary>
    public string Author { set; get; }

    /// <summary>
    /// 出版时间
    /// </summary>
    public string Year { set; get; }

    /// <summary>
    /// 销售价格
    /// </summary>
    public decimal Price { set; get; }
}
3、 创建图书信息业务逻辑类(BookInfoBLL.cs)

using System.Xml;    //引用相关文件

public class BookInfoBLL
{
    private string _basePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/xml/Books.xml";  //XML文件路径
    private XmlDocument _booksXmlDoc = null;   //创建XML文档对象

    public BookInfoBLL() 
    {
        try
        {
            _booksXmlDoc = new XmlDocument(); //初始化XML文档对象
            _booksXmlDoc.Load(_basePath);     //加载指定的XML文档
        }
        catch (Exception ex)
        {
            throw new Exception("加载XML文档出错:" + ex.Message);
        }
    }

    /// <summary>
    /// 获取图书列表(查)
    /// </summary>
    /// <param name="param">参数条件</param>
    /// <returns>图书列表</returns>
    public List<BookInfo> GetBookInfoList(BookInfo param)
    {
        List<BookInfo> bookInfoList = new List<BookInfo>();
        string xPath = "bookstore/book"; //默认获取所有图书
        if (param.BookId != 0) //根据图书ID查询
        {
            xPath = String.Format("/bookstore/book[@id='{0}']", param.BookId);
        }
        else if (!String.IsNullOrEmpty(param.Category)) //根据图书类别查询
        {
            xPath = String.Format("/bookstore/book[@category='{0}']", param.Category);
        }
        else if (!String.IsNullOrEmpty(param.Title)) //根据图书名称查询
        {
            xPath = String.Format("/bookstore/book[title='{0}']", param.Title);
        }

        XmlNodeList booksXmlNodeList = _booksXmlDoc.SelectNodes(xPath);
        foreach (XmlNode bookNode in booksXmlNodeList)
        {
            BookInfo bookInfo = new BookInfo();
            bookInfo.BookId = Convert.ToInt32(bookNode.Attributes["id"].Value);  //获取属性值
            bookInfo.Category = bookNode.Attributes["category"].Value;
            bookInfo.Language = bookNode.SelectSingleNode("title").Attributes["lang"].Value; //获取子节点的属性值
            bookInfo.Title = bookNode.SelectSingleNode("title").InnerText;     //获取元素值
            bookInfo.Author = bookNode.SelectSingleNode("author").InnerText;
            bookInfo.Year = bookNode.SelectSingleNode("year").InnerText;
            bookInfo.Price = Convert.ToDecimal(bookNode.SelectSingleNode("price").InnerText);
            bookInfoList.Add(bookInfo);
        }
        return bookInfoList;
    }

    /// <summary>
    /// 增加图书信息(增)
    /// </summary>
    /// <param name="param"></param>
    /// <returns></returns>
    public bool AddBookInfo(BookInfo param)
    {
        bool result = false;
        XmlNode root = _booksXmlDoc.SelectSingleNode("bookstore");  //查找<bookstore>
        //创建节点
        XmlElement bookXmlElement = _booksXmlDoc.CreateElement("book");
        XmlElement titleXmlElement = _booksXmlDoc.CreateElement("title");
        XmlElement authorXmlElement = _booksXmlDoc.CreateElement("author");
        XmlElement yearXmlElement = _booksXmlDoc.CreateElement("year");
        XmlElement priceXmlElement = _booksXmlDoc.CreateElement("price");

        //给节点赋值
        bookXmlElement.SetAttribute("id", param.BookId.ToString());    
        bookXmlElement.SetAttribute("category", param.Category);
        titleXmlElement.InnerText = param.Title; //给节点添加元素值
        titleXmlElement.SetAttribute("lang", param.Language);//给节点添加属性值
        authorXmlElement.InnerText = param.Author;
        yearXmlElement.InnerText = param.Year;
        priceXmlElement.InnerText = param.Price.ToString();

        //AppendChild 将指定的节点添加到该节点的子节点列表的末尾
        bookXmlElement.AppendChild(titleXmlElement);
        bookXmlElement.AppendChild(authorXmlElement);
        bookXmlElement.AppendChild(yearXmlElement);
        bookXmlElement.AppendChild(priceXmlElement);

        root.AppendChild(bookXmlElement);
        _booksXmlDoc.Save(_basePath);
        result = true;
        return result;
    }

    /// <summary>
    /// 修改图书信息(改)
    /// </summary>
    /// <param name="param"></param>
    /// <returns></returns>
    public bool EditBookInfo(BookInfo param)
    {
        bool result = false;
        if(param.BookId>0)
        {
            string xPath = String.Format("/bookstore/book[@id='{0}']", param.BookId);
            XmlNode editXmlNode = _booksXmlDoc.SelectSingleNode(xPath);
            XmlElement editXmlElement = (XmlElement)editXmlNode;
            if (editXmlElement != null)
            { 
                editXmlElement.Attributes["category"].Value = param.Category;
                editXmlElement.SelectSingleNode("title").Attributes["lang"].Value = param.Language;
                editXmlElement.SelectSingleNode("title").InnerText = param.Title;
                editXmlElement.SelectSingleNode("author").InnerText = param.Author;
                editXmlElement.SelectSingleNode("year").InnerText = param.Year;
                editXmlElement.SelectSingleNode("price").InnerText = param.Price.ToString();
                _booksXmlDoc.Save(_basePath);
                result = true;
            }
        }
        return result;
    }

    /// <summary>
    /// 删除图书信息(删)
    /// </summary>
    /// <param name="param"></param>
    /// <returns></returns>
    public bool DeleteBookInfo(BookInfo param)
    {
        bool result = false;
        if (param.BookId > 0)
        {
            string xPath = String.Format("/bookstore/book[@id='{0}']", param.BookId);
            XmlNode delXmlNode = _booksXmlDoc.SelectSingleNode(xPath);
            if (delXmlNode != null)
            {
                _booksXmlDoc.SelectSingleNode("bookstore").RemoveChild(delXmlNode);   //移除指定的子节点
                _booksXmlDoc.Save(_basePath);
                result = true;
            }
        }
        return result;
    }

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值