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>
:
</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>---</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[].InnerText;
book.BookAuthor = xlist2[].InnerText;
book.BookPrice = xlist2[].InnerText;
list.Add(book);
}
dgvBook.DataSource = list; }
}
}
C#学习笔记(13)——传统方法读取XML的更多相关文章
- 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
· 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ...
- Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法
Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...
- SQL反模式学习笔记13 使用索引
目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引. 索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...
- golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换
golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)'''from sel ...
- Javaweb学习笔记——使用Jdom解析xml
一.前言 Jdom是什么? Jdom是一个开源项目,基于树形结构,利用纯java的技术对XML文档实现解析,生成,序列化以及多种操作.它是直接为java编程服务,利用java语言的特性(方法重载,集合 ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- MiZ702学习笔记13——ZYNQ通过AXI-Lite与PL交互
在<MiZ702学习笔记7——尝试自制带总线IP>,我曾提到了AXI4-Lite的简单用法,驱动了下流水灯,只涉及到了写总线.今天,我想利用之前的VGA模块,将AXI4-Lite的读写都应 ...
- XML学习笔记(2)--dom4j操作XML
1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...
随机推荐
- [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用
1. 服务器基本安装即问题解决记录 √ 2. SVN环境搭建和客户端使用 2.1 服务端 和 客户端 安装 √ 2.2 项目建立与基本使用 √ 2.3 基本冲突解决, ...
- Access数据库中日期时间类型的时间段查询
例: select ID,预设点,备注 from 预设点派车预警 where ( 到达时间>=#2013-01-01 12:12:12# and 到达时间<=#2016-01-24 2 ...
- Linux增加swap空间
1.添加交换文件并设置其大小为12G,使用如下命令 # dd if=/dev/zero of=/home/swapfile bs=1024 count=12288000 12288000+0 reco ...
- ios app: 使用企业license设置发布app的过程
ios开发者证书与企业证书的内容,关系,以及ios app 使用企业license设置发布app的过程 iOS是一个非常封闭的系统.授权文件(.mobileprovision)和签名证书文件(.c ...
- javascript的崛起及其生态元素
随着web的流行,人们花在浏览器上的时间吸引了巨头们对浏览器的重视,继而几年前富客户端概念,一批富客户端技术的涌现,如silverlight, flex等,曾经风起云涌,最终都败给了html5 和 j ...
- jquery动态加载js/css文件方法
先来看jquery自带的getSrcript文件 方法 代码如下 复制代码 $.getScript(url,callback) 实例 代码如下 复制代码 var testVar = 'New JS l ...
- ADO.NET事务
在发布System.Transaction命名空间之前,可以直接用ADO.NET创建事务,也可以通过组件.特性和COM+运行库(位于System.EnterpriseServices命名空间中)进行事 ...
- 在Java中final类与一般类有什么样的区别
final修饰的类不能被继承. Sting就是一个被final修饰的类,我们只能用,不用继承final不仅可以修饰类,还可以修饰变量,被final修饰的变量就是一个常量,只能赋值一次注意final和f ...
- django session入门详解
概括性的讲: 1.django默认是打开对session的支持的 2.默认情况下session相关的数据会保存在数据库中.浏览器端只保存了session id session 的科普: 1.动态网站中 ...
- django -- model中只有Field类型的数据才能成为数据库中的列
一.model的定义: from django.db import models # Create your models here. class Person(models.Model): firs ...