• 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;
    
            }
        }
    }
  • 相关阅读:
    区分服务器和客户端,玩家的控制权
    分割字符串
    switch语句的使用
    博客暂停使用
    [题解]洛谷P1041 传染病控制
    [题解]洛谷P2668 斗地主
    [题解]洛谷P4017 最大食物链计数
    [题解]洛谷P1983 车站分级
    [OI学习笔记]倍增LCA
    [OI学习笔记]st表
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/7156665.html
Copyright © 2020-2023  润新知