C#学习笔记(13)——传统方法读取XML

说明(2017-7-12 16:32:47):

1. LINQ的方法虽然很简单,但是有点不好理解,sql的写法总感觉很诡异,而且LINQ的本质也是用的传统方法,所以还是采用老办法吧!

2. 注释里的代码是按照网上文章写得,但是有些地方觉得有点绕,自己尝试一下,稍微简化了一下。

3. 一般都会说,主要用到了三个类:XmlDocument, XmlElement, XmlAttribute,因为目前我只需要进行查询,所以只用到了一个XmlDocument加载xml文件用,其他的都是一些杂七杂八的属性和方法。

步骤:

(1)实例化一个XmlDocument xdoc。

(2)实例化XmlReaderSettings settings,这个是为了消除xml文档里的注释干扰,不然会把注释当成节点,从而报错,如果xml里面没有注释,直接就可以xdoc.load("book.xml")。通过XmlReader reader加载xml文档。

(3)xdoc加载上面的reader,真墨迹。

(4)XmlNode xn = xdoc.SelectSingleNode("bookstore");获取根节点bookstore。

(5)XmlNodeList xlist = xn.ChildNodes;获取bookstore下的所有次级节点book。

(6)List<BookModel> list = new List<BookModel>();实例化BookModel集合,准备装一堆BookModel。

(7)foreach (XmlNode item in xlist)遍历所有book节点。

(8)book.BookType = item.Attributes["Type"].InnerText;   book的属性这么来搞。

(9)XmlNodeList xlist2 = item.ChildNodes;   再获取book下面的所有次级节点。

(10)book.BookTitle = xlist2[0].InnerText;   book下面的标签内容这么来搞。

(11)list.Add(book); 都装进BookModel集合。

(12)dgvBook.DataSource = list; 把BookModel集合关联到dataGridView控件,完事!

book.xml

<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
  <!--记录书本的信息-->
  <book Type="必修课" ISBN="7-111-19149-2">
    <title>数据结构</title>
    <author>严蔚敏</author>
    <price>30.00</price>
    8:
  </book>
  <book Type="必修课" ISBN="7-111-19149-3">
    <title>路由型与交换型互联网基础</title>
    <author>程庆梅</author>
    <price>27.00</price>

  </book>
  <book Type="必修课" ISBN="7-111-19149-4">
    <title>计算机硬件技术基础</title>
    <author>李继灿</author>
    <price>25.00</price>

  </book>
  <book Type="必修课" ISBN="7-111-19149-5">
    <title>软件质量保证与管理</title>
    <author>朱少民</author>
    <price>39.00</price>

  </book>
  <book Type="必修课" ISBN="7-111-19149-6">
    <title>算法设计与分析</title>
    <author>王红梅</author>
    <price>23.00</price>

  </book>
  <book Type="选修课" ISBN="7-111-19149-1">
    <title>计算机操作系统</title>
    <author>7-111-19149-1</author>
    <price>28.00</price>

  </book>

</bookstore>

BookModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace XML_Demo
{
    public class BookModel
    {
        public string BookType { get; set; }
        public string BookISBN { get; set; }
        public string BookTitle { get; set; }
        public string BookAuthor { get; set; }
        public string BookPrice { get; set; }

    }
}

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using ICSharpCode;

namespace XML_Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            #region
            //XmlDocument xdoc = new XmlDocument();
            //XmlReaderSettings settings = new XmlReaderSettings();
            //settings.IgnoreComments = true;
            //XmlReader reader = XmlReader.Create("../../Book.xml", settings);
            //xdoc.Load(reader);
            //XmlNode xNode = xdoc.SelectSingleNode("bookstore");
            //XmlNodeList xList = xNode.ChildNodes;
            //List<BookModel> bookList = new List<BookModel>();
            //foreach (XmlNode xn in xList)
            //{
            //    BookModel book = new BookModel();
            //    XmlElement xe = (XmlElement)xn;
            //    book.BookISBN = xe.GetAttribute("ISBN");
            //    book.BookType = xe.GetAttribute("Type");
            //    book.BookAuthor = xn.Name;
            //    XmlNodeList xList2 = xe.ChildNodes;
            //    book.BookAuthor = xList2.Item(0).InnerText;
            //    book.BookTitle = xList2.Item(1).InnerText;
            //    book.BookPrice = xList2.Item(2).InnerText;
            //    bookList.Add(book);
            //}
            //dgvBook.DataSource = bookList;
            #endregion
            XmlDocument xdoc = new XmlDocument();
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.IgnoreComments = true;
            XmlReader reader = XmlReader.Create("../../book.xml", settings);
            xdoc.Load(reader);
            XmlNode xn = xdoc.SelectSingleNode("bookstore");
            XmlNodeList xlist = xn.ChildNodes;
            List<BookModel> list = new List<BookModel>();
            foreach (XmlNode item in xlist)
            {
                BookModel book = new BookModel();
                //XmlElement xele = (XmlElement)item;
                book.BookISBN = item.Attributes["ISBN"].InnerText;
                book.BookType = item.Attributes["Type"].InnerText;
                XmlNodeList xlist2 = item.ChildNodes;
                book.BookTitle = xlist2[0].InnerText;
                book.BookAuthor = xlist2[1].InnerText;
                book.BookPrice = xlist2[2].InnerText;
                list.Add(book);
            }
            dgvBook.DataSource = list;

        }
    }
}
原文地址:https://www.cnblogs.com/Jacklovely/p/7156665.html