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解析 ...
随机推荐
- nginx 安装SSL安全证书
安装证书 文件说明: 1. 证书文件214051493730988.pem,包含两段内容,请不要删除任何一段内容. 2. 如果是证书系统创建的CSR,还包含:证书私钥文件214051493730988 ...
- 【java】详解JFrame结构的分层
在这篇博文中,笔者会介绍JFrame窗口的分层.JFrame继承自Frame,同JFrame.JDialog.JApplet都是重量级组件.如果不弄清楚Frame的分层结构,那么在设置组件的某些特效的 ...
- 【JQuery】jQuery(document).ready(function($) { });的几种表示方法及load和ready的区别
jQuery中处理加载时机的几种方式 第一种: jQuery(document).ready(function() { alert("你好"); }); //或 $(documen ...
- 使用Nexus搭建Maven内部服务器
概述 我们在使用maven时,一般通过网络上一些公共的maven仓库来获取jar包,但是有时候会碰到网速比较慢的情况就比较郁闷,Nexus是一个maven的服务器,可以让我们搭建一个本 ...
- Spark技术栈
- ARGB和PARGB
原文链接: http://blog.csdn.net/lnwaycool/article/details/8610313 ARGB和PARGB是针对32位图像而言的,Windows下图像可以是1位.4 ...
- Bootstrap表单构造器
http://www.bootcss.com/p/bootstrap-form-builder/
- Android Developers:保存文件
Android使用一个和其它平台基于硬盘文件系统相似的文件系统.这个课程描述了如何和在Android文件系统使用File APIs读和写文件. 一个File对象适用于读或者写从头到尾没用中断的大型数据 ...
- ELK日志相关
转: Logstash 讲解与实战应用 原创qw871122016-08-20 16:06:07评论(1)40217人阅读 一.Logstash 介绍 Logstash 是一款强大的数据处理工具,它可 ...
- office2010激活 错误代码0X8007000D,KMS激活0x8007000D错误解决办法,亲测成功激活
只针对VL版本 注意:此方法只对VL版本的,或者是MSDN版本通过替换文件转为VL版本的Office2010有效.零售版本的就别指望KMS激活了. 怎么看自己是不是VL版本的,只要看帮助里面激活的地方 ...