LINQ to XML实现XML文档的增删改查

1、实例中的XML文档(Books.xml)

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
  <book id="1" category="CHILDREN">
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <publishDate>2005-08-15</publishDate>
    <price>29.99</price>
  </book>
  <book id="2" category="WEB">
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <publishDate>2003-10-18</publishDate>
    <price>39.95</price>
  </book>
  <book id="3" category="WEB">
    <title>XQuery Kick Start</title>
    <author>James McGovern</author>
    <publishDate>2005-06-25</publishDate>
    <price>49.99</price>
  </book>
</bookstore>

2、 创建图书信息实体类(BookInfo.cs)

/// <summary>
/// 图书信息实体类
/// </summary>
public class BookInfo
{
    public int BookId { set; get; }             //图书ID
    public string Title { set; get; }           //图书名称
    public string Category { set; get; }        //图书分类
    public string Author { set; get; }          //图书作者
    public DateTime PublishDate { set; get; }   //出版时间
    public Double Price { set; get; }           //销售价格
}

3、 创建图书信息业务逻辑类(BookInfoBLL.cs)

using System.Linq;
using System.Xml.Linq;
public class BookInfoBLL
{
    private string _basePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/xml/Books.xml";  //XML文件路径 

    /// <summary>
    /// 创建图书XML文档(创建)
    /// </summary>
    public void CreateBookXml()
    { 
        //获取图书列表
        List<BookInfo> bookList = GetBookList();
        //创建XML文档
        XDocument bookDoc = new XDocument();
        //创建声明对象
        XDeclaration xDeclaration = new XDeclaration("1.0","utf-8","yes");
        bookDoc.Declaration = xDeclaration;    //指定XML声明对象
        //创建bookstore节点
        XElement xElement = new XElement("bookstore");
        foreach (BookInfo book in bookList)
        {
            //创建book节点
            XElement bookXml = new XElement("book");
            //添加属性
            bookXml.Add(new XAttribute("id",book.BookId));
            bookXml.Add(new XAttribute("category",book.Category));
            //添加子节点
            bookXml.Add(new XElement("title",book.Title));
            bookXml.Add(new XElement("author",book.Author));
            bookXml.Add(new XElement("publishDate",book.PublishDate.ToString("yyyy-MM-dd")));
            bookXml.Add(new XElement("price",book.Price));
            //将book节点添加到bookstore节点中
            xElement.Add(bookXml);
        }
        //保存文件
        bookDoc.Add(xElement);
        bookDoc.Save(_basePath);
    }

    /// <summary>  
    /// 获取图书列表(查询)  
    /// </summary>  
    /// <param name="param">参数条件</param>  
    /// <returns>图书列表</returns> 
    public List<BookInfo> GetBookInfoList(BookInfo param)
    {
        List<BookInfo> bookList = new List<BookInfo>();
        XElement xml = XElement.Load(_basePath);

        var bookVar = xml.Descendants("book");   //默认查询所有图书
        if (param.BookId != 0) //根据图书ID查询  
        {
            bookVar = xml.Descendants("book").Where(a => a.Attribute("id").Value == param.BookId.ToString());
        }  
        else if (!String.IsNullOrEmpty(param.Category)) //根据图书类别查询  
        {
            bookVar = xml.Descendants("book").Where(a => a.Attribute("category").Value == param.Category);
        }  
        else if (!String.IsNullOrEmpty(param.Title)) //根据图书名称查询  
        {
            bookVar = xml.Descendants("book").Where(a => a.Element("title").Value == param.Title);
        }

        bookList = (from book in bookVar
                    select new BookInfo
                    {
                        BookId = int.Parse(book.Attribute("id").Value),Category = book.Attribute("category").Value,Title = book.Element("title").Value,Author = book.Element("author").Value,PublishDate = DateTime.Parse(book.Element("publishDate").Value),Price = double.Parse(book.Element("price").Value)
                    }).ToList();
        return bookList;
    }

    /// <summary>  
    /// 增加图书信息(新增)  
    /// </summary>  
    /// <param name="param"></param>  
    /// <returns></returns>  
    public bool AddBookInfo(BookInfo param)
    {
        XElement xml = XElement.Load(_basePath);
        //创建book节点
        XElement bookXml = new XElement("book");
        //添加属性
        bookXml.Add(new XAttribute("id",param.BookId));
        bookXml.Add(new XAttribute("category",param.Category));
        //添加子节点
        bookXml.Add(new XElement("title",param.Title));
        bookXml.Add(new XElement("author",param.Author));
        bookXml.Add(new XElement("publishDate",param.PublishDate.ToString("yyyy-MM-dd")));
        bookXml.Add(new XElement("price",param.Price));
        xml.Add(bookXml);
        //保存
        xml.Save(_basePath);
        return true;
    }

    /// <summary>  
    /// 修改图书信息(修改)  
    /// </summary>  
    /// <param name="param"></param>  
    /// <returns></returns>  
    public bool EditBookInfo(BookInfo param)
    {
        bool result = false;
        if (param.BookId > 0)
        {
            //根据BookId找到要修改的图书XML
            XElement xml = XElement.Load(_basePath);
            XElement bookXml = (from db in xml.Descendants("book") where db.Attribute("id").Value == param.BookId.ToString() select db).Single();
            //修改属性
            bookXml.SetAttributeValue("category",param.Category);
            //修改子节点
            bookXml.SetElementValue("title",param.Title);
            bookXml.SetElementValue("author",param.Author);
            bookXml.SetElementValue("publishDate",param.PublishDate.ToString("yyyy-MM-dd"));
            bookXml.SetElementValue("price",param.Price);
            //保存
            xml.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)
        {
            //根据BookId找到要删除的图书XML
            XElement xml = XElement.Load(_basePath);
            XElement bookXml = (from db in xml.Descendants("book") where db.Attribute("id").Value == param.BookId.ToString() select db).Single();
            bookXml.Remove();
            //保存
            xml.Save(_basePath);
            result = true;
        }
        return result;
    }

    /// <summary>
    /// 获取图书列表
    /// </summary>
    /// <returns></returns>
    public List<BookInfo> GetBookList()
    {
        List<BookInfo> bookList = new List<BookInfo>();
        //创建图书1
        BookInfo book1 = new BookInfo() { 
            BookId = 1,Category = "CHILDREN",Title = "Harry Potter",Author = "J K. Rowling",PublishDate = new DateTime(2005,08,15),Price = 29.99
        };
        bookList.Add(book1);
        //创建图书2
        BookInfo book2 = new BookInfo()
        {
            BookId = 2,Category = "WEB",Title = "Learning XML",Author = "Erik T. Ray",PublishDate = new DateTime(2003,10,18),Price = 39.95
        };
        bookList.Add(book2);
        //创建图书3
        BookInfo book3 = new BookInfo()
        {
            BookId = 3,Title = "XQuery Kick Start",Author = "James McGovern",6,25),Price = 49.99
        };
        bookList.Add(book3);
        return bookList;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇