说明(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> 8: </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>7-111-19149-1</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[0].InnerText; book.BookAuthor = xlist2[1].InnerText; book.BookPrice = xlist2[2].InnerText; list.Add(book); } dgvBook.DataSource = list; } } }