详解c#读取XML的实例代码

2019-12-30 15:24:36刘景俊

为了方便读取,我还定义一个书的实体类,名为BookModel,具体内容如下:


 using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Text;
   
   namespace 使用XmlDocument
   {
     public class BookModel
     {
      public BookModel()
      { }
      /// <summary>
      /// 所对应的课程类型
      /// </summary>
      private string bookType;
   
      public string BookType
      {
        get { return bookType; }
        set { bookType = value; }
      }
   
      /// <summary>
      /// 书所对应的ISBN号
      /// </summary>
      private string bookISBN;
   
      public string BookISBN
      {
        get { return bookISBN; }
        set { bookISBN = value; }
      }
   
      /// <summary>
      /// 书名
      /// </summary>
      private string bookName;
   
      public string BookName
      {
        get { return bookName; }
        set { bookName = value; }
      }
   
      /// <summary>
      /// 作者
      /// </summary>
      private string bookAuthor;
   
      public string BookAuthor
      {
        get { return bookAuthor; }
        set { bookAuthor = value; }
      }
   
      /// <summary>
      /// 价格
      /// </summary>
      private double bookPrice;
   
      public double BookPrice
      {
        get { return bookPrice; }
        set { bookPrice = value; }
      }
    }
  }

1.使用XmlDocument.

使用XmlDocument是一种基于文档结构模型的方式来读取XML文件.在XML文件中,我们可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树.最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其它的一些属性.例如:


  xn 代表一个结点
   xn.Name;//这个结点的名称
   xn.Value;//这个结点的值
   xn.ChildNodes;//这个结点的所有子结点
   xn.ParentNode;//这个结点的父结点
   .......

1.1 读取所有的数据.

使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.


XmlDocument doc = new XmlDocument();
doc.Load(@"....Book.xml");

然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码


  // 得到根节点bookstore
   XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
   
   
   // 得到根节点的所有子节点
   XmlNodeList xnl = xn.ChildNodes;
   
   foreach (XmlNode xn1 in xnl)
   {
    BookModel bookModel = new BookModel();
    // 将节点转换为元素,便于得到节点的属性值
    XmlElement xe = (XmlElement)xn1;
    // 得到Type和ISBN两个属性的属性值
    bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
    bookModel.BookType = xe.GetAttribute("Type").ToString();
    // 得到Book节点的所有子节点
    XmlNodeList xnl0 = xe.ChildNodes;
    bookModel.BookName=xnl0.Item(0).InnerText;
    bookModel.BookAuthor=xnl0.Item(1).InnerText;
    bookModel.BookPrice=Convert.ToDouble(xnl0.Item(2).InnerText);
    bookModeList.Add(bookModel);
  }
  dgvBookInfo.DataSource = bookModeList;