LINQ解析XML
读取XML文档
这里面主要涉及的类包括XElement,XDocument,下面主要是用一个很简单的文档来描述一下其使用方法
建立一个book.xml文件:
<?xml version="1.0" encoding="utf-8" ?> <books> <book> <title>Book1</title> <time>1989/06/23</time> </book> <book> <title>Book2</title> <time>1989/06/23</time> </book> </books>
那么具体过程主要分为2步,先加载文件至XElement或XDocument对象,然后用LINQ TO XML对其进行操作
首先看XElement的用法
var query = from m in XElement.Load(Server.MapPath("book.xml")).Elements("book")select m;this.GridView1.DataSource = query;
this.GridView1.DataBind();
那么这个地方需要注意的是包含在查询结果的数据集并没有显示我们期望的节点数据,而且每个子节点也没有作为其中一个独立字段显示,这是因为,返回的对象是泛型XElement的集合,而不是Book对象,因为这里LINQ无法指定每个节点应映射为何种对象。
可以把上面的查询语句做一下简单的修改:
var query = from m in XElement.Load(Server.MapPath("book.xml")).Elements("book")select new
{Title = m.Element("title").Value,
Time = m.Element("time").Value
};
这样界面上就会显示我们所需要显示的数据了,这里需要注意的是,XElement的Load方法是试图加载整个文档,在xml文件比较大的时候就不是很方便了,所以下面看下XDocument的方法,这个基本上就如出一辄,不详细的介绍了
string path = Server.MapPath("~/book.xml");XDocument doc = XDocument.Load(path);var query = from book in doc.Descendants("book")where book.Element("title").Value.Equals("Book1")select new
{Title = book.Element("title").Value,
Time = book.Element("time").Value
};
使用LINQ TO XML在操作XML感觉还是很方便的,同时省了许多不必要的语法,掌握还是很必要的,这里也仅仅是一个简单的介绍,不过我想对于大部分的操作,这几行代码基本也就够了。