Home  >  Article  >  Backend Development  >  C# sample code sharing to implement the addition, deletion, modification and query function of XML documents

C# sample code sharing to implement the addition, deletion, modification and query function of XML documents

黄舟
黄舟Original
2017-03-27 11:40:331371browse

This article mainly introduces the C# implementation of the addition, deletion, modification and query functions of XML documents. It analyzes the creation of xml documents and C#'s loading, addition, deletion and modification of xml documents in the form of examples. For operational skills such as checking, friends who need it can refer to

. This article describes how C# implements the add, delete, modify, and check functions of XML documents. Share it with everyone for your reference, the details are as follows:

1. Create an instance XML file (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. Create a book information entity class (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. Create book information business logic class (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=&#39;{0}&#39;]", param.BookId);
    }
    else if (!String.IsNullOrEmpty(param.Category)) //根据图书类别查询
    {
      xPath = String.Format("/bookstore/book[@category=&#39;{0}&#39;]", param.Category);
    }
    else if (!String.IsNullOrEmpty(param.Title)) //根据图书名称查询
    {
      xPath = String.Format("/bookstore/book[title=&#39;{0}&#39;]", 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=&#39;{0}&#39;]", 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=&#39;{0}&#39;]", param.BookId);
      XmlNode delXmlNode = _booksXmlDoc.SelectSingleNode(xPath);
      if (delXmlNode != null)
      {
        _booksXmlDoc.SelectSingleNode("bookstore").RemoveChild(delXmlNode);  //移除指定的子节点
        _booksXmlDoc.Save(_basePath);
        result = true;
      }
    }
    return result;
  }
}

The above is the detailed content of C# sample code sharing to implement the addition, deletion, modification and query function of XML documents. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn