本文实例讲述了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文档的增删改查功能示例的详细内容...