当前位置: 移动技术网 > IT编程>开发语言>c# > C#实现XML文档的增删改查功能示例

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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格式化/压缩工具:

在线xml/json互相转换工具:

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

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网