说明(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. HDU 1710 Binary Tree Traversals (二叉树遍历)

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  2. POJ 2976 Dropping tests (0/1分数规划)

    Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4654   Accepted: 1587 De ...

  3. Lomboz插件

    2008年05月20日 星期二 下午 01:47 Lomboz是Eclipse的一个主要的开源插件(open-source plug-in),Lomboz插件能够使Java开发者更好的使用Eclips ...

  4. c# 笔试题及参考答案大全

    http://blog.csdn.net/smileberry1/article/details/3958670

  5. Redis 的安装与使用(单节点)

    Redis 的安装与使用(单节点)   环境:CentOS 6.5 Redis 版本:redis-3.0 (考虑到Redis3.0 在集群和性能提升方面的特性,rc 版为正式版的候选版,而且 很快就出 ...

  6. RAID简介[zz]

    RAID 0 是指磁盘分段(Disk Striping)技术其实现方法为将数据分段,同时写到多个磁盘上.其优点是磁盘可以实现并行的输入和输出,提高磁盘读写速度,但是这种技术无容错性能:RAID 1是指 ...

  7. 基础002_V7-CLB

    一.综述 参考ug474.pdf: 7系列中,一个CLB包含两个slice: 每个CLB的资源: CLB可配置的主要功能: 二.主要功能 LUT是基本单元,例如选择器assign muxout =  ...

  8. kafaka学习

    创建一个topic: [root@hdp1 bin]# ./kafka-topics. --replication-factor --partitions --topic justin Created ...

  9. XML5个转义符

    XML5个转义符:<,>,&,”,©;的转义字符分别如下: < >& " &apos;

  10. 【Unity】6.4 Transform--移动、旋转和缩放游戏对象

    分类:Unity.C#.VS2015 创建日期:2016-04-20 一.简介 Unity引擎提供了丰富的组件和类库,为游戏开发提供了非常大的便利,熟练掌握和使用这些API,对于游戏开发的效率提高很重 ...