好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#实现XML文档的增删改查功能示例

本文实例讲述了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;

   }

}

希望本文所述对大家C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#实现XML文档的增删改查功能示例的详细内容...

  阅读:40次