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;

}

}

PS:这里再为大家提供几款比较实用的xml相关在线工具供大家使用:

在线XML格式化/压缩工具:

http://tools.jb51.net/code/xmlformat

在线XML/JSON互相转换工具:

http://tools.jb51.net/code/xmljson

XML在线压缩/格式化工具:

http://tools.jb51.net/code/xml_format_compress

XML代码在线格式化美化工具:

http://tools.jb51.net/code/xmlcodeformat

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#中XML文件操作技巧汇总》、《C#常见控件用法教程》、《C#程序设计之线程使用技巧总结》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#数组操作技巧总结》及《C#面向对象程序设计入门教程》

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

以上是 C#实现XML文档的增删改查功能示例 的全部内容, 来源链接: utcz.com/z/351169.html

回到顶部