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解析 ...
随机推荐
- IIS7虚拟目录出现HTTP错误500.19(由于权限不足而无法读取配置文件)的解决方案
今天在window7上配置asp.net网站,但是访问总是提示 错误摘要HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效.详细 ...
- [转]python数据持久存储:pickle模块的基本使用
python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...
- Java 利用 poi 生成 Excel文件的通用例子
在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 生 ...
- springboot 多环境配置yml或properties
https://www.cnblogs.com/mr-yang-localhost/p/8971327.html springboot 多环境配置 https://blog.csdn.net/li ...
- flowable Service介绍
1 原始数据库表说明 ACT_RE_*: RE stands for repository. Tables with this prefix contain static information su ...
- 在Windows系统上怎么使用SecureCRT链接Linux AWS EC2 -摘自网络
在Windows系统上就需要使用SecureCRT,Putty等工具,进行连接.但是AWS提供的XXX.pem文件,需要做一些处理SecureCRT的方法: 1.使用XXX.pem文件生成一个公钥文件 ...
- shell 计算时间差
#!/bin/bash #date_5='awk 'BEGIN{print strftime("%H:%M",(systime()-300))}'' #ps -ef | grep ...
- IOS7 新特性
相关ios7新特性 帖子.挺全的.一定要看看哪 http://www.devdiv.com/iOS_iPhone-ios_ui_uikit_text_kit_-thread-203631-1-1.ht ...
- Atitit Seed-Filling种子填充算法attilax总结
Atitit Seed-Filling种子填充算法attilax总结 种子填充的原理,4联通与8联通区域的选择.. 三个队列 waitProcessPixList tempPixList Proces ...
- [svc]NFS存储企业场景及nfs最佳实战探究
办公网络里人一般系统用共享,尤其是财务, 他们喜欢直接点开编辑. 而不喜欢ftp nfs在网站架构中的用途 注: 如果pv量少,则放在一台机器上速度更快,如果几千万pv,则存储分布式部署. 网站架构中 ...