说明(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的更多相关文章

  1. 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理

    · 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ...

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

    Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...

  3. SQL反模式学习笔记13 使用索引

    目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引.  索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...

  4. golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

    golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...

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

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  6. Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)'''from sel ...

  7. Javaweb学习笔记——使用Jdom解析xml

    一.前言 Jdom是什么? Jdom是一个开源项目,基于树形结构,利用纯java的技术对XML文档实现解析,生成,序列化以及多种操作.它是直接为java编程服务,利用java语言的特性(方法重载,集合 ...

  8. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  9. MiZ702学习笔记13——ZYNQ通过AXI-Lite与PL交互

    在<MiZ702学习笔记7——尝试自制带总线IP>,我曾提到了AXI4-Lite的简单用法,驱动了下流水灯,只涉及到了写总线.今天,我想利用之前的VGA模块,将AXI4-Lite的读写都应 ...

  10. XML学习笔记(2)--dom4j操作XML

    1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...

随机推荐

  1. 【MAVEN】如何在Eclipse中创建MAVEN项目

    目录结构: contents structure [+] 1,Maven简介 2,Maven安装 2.1,下载Maven 2.2,配置环境变量 2.3,测试 3,Maven仓库 3.1,Maven仓库 ...

  2. Firefox 网络调试工具

    1.Firefox 简介 Firefox 官网下载地址 Firefox 其它下载地址 Firefox 58.0.2 for Mac,密码:346y. Firefox 36.0.4 for Mac,密码 ...

  3. 如何检查后台服务(Android的Service类)是否正在运行?

    private boolean isServiceRunning() { ActivityManager manager = (ActivityManager) getSystemService(AC ...

  4. MySQL和ORACLE、SQL Server、PostgreSQL相比

  5. 面向对象的Shell脚本

    还记得以前那个用算素数的正则表达式吗?编程这个世界太有趣了,总是能看到一些即别出心裁的东西.你有没有想过在写Shell脚本的时候可以把你的变量和函数放到一个类中?不要以为这不可能,这不,我在网上又看到 ...

  6. C++栈学习——顺序栈和链栈的差别

    C++中栈有顺序栈和链栈之分.在顺序栈中,定义了栈的栈底指针(存储空间首地址base).栈顶指针top以及顺序存储空间的大小stacksize(个人感觉这个数据成员是能够不用定义的) //顺序栈数据结 ...

  7. cassandra运行出现了Unable to gossip with any seeds,cqlsh链接不上,提示connection refused处理办法

    cassandra运行出现了Unable to gossip with any seeds,cqlsh链接不上,提示connection refused处理办法 问题描述 当启动了cassandra之 ...

  8. GDI+绘制渐变色

    例1: void CTextDlg::OnPaint(){Graphics graphics(this->m_hWnd); LinearGradientBrush linGrBrush( Poi ...

  9. 你应该知道的JAVA面试题

    你应该知道的JAVA面试题 经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问.答案会在后面的文章中逐渐发布出来. 基础题目 Java线程的状态 进程和线 ...

  10. SQL语句操作优先级顺序

    SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...