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;

        }
    }
}
时间: 2024-11-06 16:13:09

C#学习笔记(13)——传统方法读取XML的相关文章

mybatis学习笔记(13)-查询缓存之二级缓存

mybatis学习笔记(13)-查询缓存之二级缓存 mybatis学习笔记13-查询缓存之二级缓存 二级缓存原理 开启二级缓存 调用pojo类实现序列化接口 测试方法 useCache配置 刷新缓存就是清空缓存 应用场景和局限性 本文主要讲mybatis的二级缓存,二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的. 二级缓存原理 首先开启mybatis的二级缓存. sqlS

python基础教程_学习笔记13:标准库:一些最爱——sys

标准库:一些最爱 sys sys这个模块让你能够访问与python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描述 argv 命令行参数,包括脚本名称 exit([arg]) 退出当前程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 类似sunos5或者win32的平台标识符 stdin 标准输入流--一个类文件对象 stdout 标准输出流--一个类文件对象 stde

UI学习笔记---第十六天XML JSON解析

一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML数据格式的功能:数据交换 web服务  内容管理  用作配置文件 一对标签称为一个节点  节点可以包含节点   没有子节点叫叶子节点  只有一个根节点  节点可以相互嵌套 三.进行XML解析时使用到的SAX工具 SAX:Simple API for XML  基于事件驱动的解析方式,逐行解析数据.(

Perl语言学习笔记 13 目标操作

1.改变目录 chdir "/etc" or die "can't chdir to '/etc'!\n"; 省略参数会回到用户主目录,与cd效果一样: 2.文件名通配 my @all_files = glob "*"; #不包括以点号开头的文件 my @pm_files = glob "*.pm"; 一次匹配多种模式,用空格隔开:my @files = ".* *"; #可以匹配所有的文件,包括以点号开头

Python学习笔记__12.10章 XML

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 XML虽然比JSON复杂,在Web中应用也不如以前多了,不过仍有很多地方在用,所以,有必要了解如何操作XML. 1.DOM vs SAX 操作XML有两种方法:DOM和SAX.DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点.SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件. 正常情况下,优先考虑SAX,因为DOM实在太占内存. 2.使用SAX解析XML 在Python

HTML&CSS基础学习笔记13—无序列表

无序列表 有时我们的工作繁忙,杂事很多,怕忘记,就会把事情一件件列出来,防止忘记. 它们的排列顺序对于我们来说并不重要,可以随意调换,我们将它称为无序列表,HTML里用<ul>标签来表示无序列表,列表里的项目则用<li>标签来表示: 1 2 3 4 5 <ul>     <li></li>     <li></li>     ... </ul> 看一段实例代码: 对于的浏览器显示结果是这样的: 更多内容学习,请

python 学习笔记 13 -- 常用的时间模块之time

Python 没有包含对应日期和时间的内置类型,不过提供了3个相应的模块,可以采用多种表示管理日期和时间值: *    time 模块由底层C库提供与时间相关的函数.它包含一些函数用于获取时钟时间和处理器的运行时间,还提供了基本解析和字符串格式化工具 *    datetime 模块为日期.时间以及日期时间值提供一个更高层接口.datetime 中的类支持算术.比较和时区配置. *    calendar 模块可以创建周.月和年的格式化表示.它还可以用来计算重复事件.给定日期是星期几,以及其他基

Swift学习笔记(13)--属性 (Properties)

普通属性用var和let即可,本文不做详述 1.延迟存储属性 延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性.在属性声明前使用@lazy来标示一个延迟存储属性. class DataImporter { /* DataImporter 是一个将外部文件中的数据导入的类. 这个类的初始化会消耗不少时间. */ var fileName = "data.txt" // 这是提供数据导入功能 } class DataManager { @lazy var importer = D

springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需求 表现层实现 list绑定 需求 表现层实现 map绑定 本文主要介绍注解开发的集合类型參数绑定,包含数组绑定,list绑定以及map绑定 数组绑定 需求 商品批量删除,用户在页面选择多个商品.批量删除. 表现层实现 关键:将页面选择(多选)的商品id,传到controller方法的形參,方法形參使用数组接收页面请求的多个商

Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法

Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridPanel中的列都具有排序功能,效果如下: 如果要禁用列排序,需要在列模型中添加一个属性Sortable="false" 客户端排序 排序是对Store的操作.如果我们要在一个Store中加入排序,可以使用下面的配置: <Sorters> <ext:DataSorter P