ADO.NET系列之操作XML
如题,我们保存数据的方式有很多种。在ASP.NET中,可以通过js赋值隐藏域的方式,也可以通过ViewState,Session这样的内置对象,还可以通过数据库的形式。现在经常用到的就是XML了,它的结构灵活,同时占用的空间很少,也比较容易操作,今天我们就来说说ADO.NET中,如何去操作XML。
首先我们可以在一个页面上,放入一个GridView用来显示读取的XML的数据(这里使用的是经典的books.xml,在一些网站上可以下载),同时再放入一个富文本框来显示特定的节点,还有一个按钮用于点击后在文本框中显示XML特定节点的内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="XmlToDataTable.aspx.cs"
Inherits="WebApplication1.XmlToDataTable" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtShow" runat="server" TextMode="MultiLine" Width="100%"></asp:TextBox>
<asp:GridView ID="gvXML" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField HeaderText="Id" DataField="id" />
<asp:BoundField HeaderText="Author" DataField="author" />
<asp:BoundField HeaderText="Title" DataField="title" />
<asp:BoundField HeaderText="Genre" DataField="genre" />
<asp:BoundField HeaderText="Price" DataField="price" />
<asp:BoundField HeaderText="Publish_date" DataField="publish_date" />
<asp:BoundField HeaderText="Description" DataField="description" />
</Columns>
</asp:GridView>
<asp:Button ID="btnExport" runat="server" Text="导出XML" OnClick="btnExport_Click" />
</div>
</form>
</body>
</html>
大家可以看到我在GridView中绑定了一些列,而这些列正是我们的XML拥有的一些节点:
<?xml version="1.0"?>
-<catalog> -<book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> +<book id="bk102"> -<book id="bk103"> <author>Corets, Eva</author> <title>Maeve Ascendant</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-11-17</publish_date> <description>After the collapse of a nanotechnology society in England, the young survivors lay the foundation for a new society.</description> </book> -<book id="bk104"> <author>Corets, Eva</author> <title>Oberon's Legacy</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>--</publish_date> <description>In post-apocalypse England, the mysterious agent known only as Oberon helps to create a new life for the inhabitants of London. Sequel to Maeve Ascendant.</description> </book> -<book id="bk105"> <author>Corets, Eva</author> <title>The Sundered Grail</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>--</publish_date> <description>The two daughters of Maeve, half-sisters, battle one another for control of England. Sequel to Oberon's Legacy.</description> </book> -<book id="bk106"> <author>Randall, Cynthia</author> <title>Lover Birds</title> <genre>Romance</genre> <price>4.95</price> <publish_date>2000-09-02</publish_date> <description>When Carla meets Paul at an ornithology conference, tempers fly as feathers get ruffled.</description> </book> -<book id="bk107"> <author>Thurman, Paula</author> <title>Splish Splash</title> <genre>Romance</genre> <price>4.95</price> <publish_date>2000-11-02</publish_date> <description>A deep sea diver finds true love twenty thousand leagues beneath the sea.</description> </book> -<book id="bk108"> <author>Knorr, Stefan</author> <title>Creepy Crawlies</title> <genre>Horror</genre> <price>4.95</price> <publish_date>2000-12-06</publish_date> <description>An anthology of horror stories about roaches, centipedes, scorpions and other insects.</description> </book> -<book id="bk109"> <author>Kress, Peter</author> <title>Paradox Lost</title> <genre>Science Fiction</genre> <price>6.95</price> <publish_date>2000-11-02</publish_date> <description>After an inadvertant trip through a Heisenberg Uncertainty Device, James Salway discovers the problems of being quantum.</description> </book> -<book id="bk110"> <author>O'Brien, Tim</author> <title>Microsoft .NET: The Programming Bible</title> <genre>Computer</genre> <price>36.95</price> <publish_date>--</publish_date> <description>Microsoft's .NET initiative is explored in detail in this deep programmer's reference.</description> </book> -<book id="bk111"> <author>O'Brien, Tim</author> <title>MSXML3: A Comprehensive Guide</title> <genre>Computer</genre> <price>36.95</price> <publish_date>2000-12-01</publish_date> <description>The Microsoft MSXML3 parser is covered in detail, with attention to XML DOM interfaces, XSLT processing, SAX and more.</description> </book> -<book id="bk112"> <author>Galos, Mike</author> <title>Visual Studio 7: A Comprehensive Guide</title> <genre>Computer</genre> <price>49.95</price> <publish_date>2001-04-16</publish_date> <description>Microsoft Visual Studio 7 is explored in depth, looking at how Visual Basic, Visual C++, C#, and ASP+ are integrated into a comprehensive development environment.</description> </book> </catalog>
嗯,貌似看起来有些乱,不过马上我们处理了之后,它就会变得整齐。接下来在后台我们开始操作XML,首先我们需要让GridView显示数据:首先我们需要建立一个数据集DataSet,然后使用ADO.NET中自带的方法去读取XML,这里的实现很简单:
DataSet ds = new DataSet();
string Path = Server.MapPath("XML/books.xml");
ds.ReadXml(Path);
这样我们的ds中就已经有数据了,接下来绑定GridView后,呈现出来的就是这样:

这时候我们的XML已经读取成功了,接下来我们可以简单的操作下XML中的节点:
private void ShowXML(string Path)
{
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNodeList nodeList = doc.SelectNodes("//title");
foreach(XmlNode node in nodeList)
{
txtShow.Text += node.InnerXml + "\r\n";
}
} protected void btnExport_Click(object sender, EventArgs e)
{
string Path = Server.MapPath("XML/books.xml");
ShowXML(Path);
}
这里我们用到了XmlDocument类,这个类是用于表示整个XML的DOM,另外一个XmlNode类是表示XML中的一个节点,而XmlNodeList则是表示可以迭代的,XmlNode的一个集合,我们在这里是在加载了DOM对象后,选择了title节点的集合,然后遍历出每个节点下的内容并赋值给txtShow,效果如下:

至此我们已经成功读取到该节点,关于XML的简单操作就介绍到这里。XML的其他操作还有XmlPath的方式,以及各种其他复杂的方式。不过对于XML本身,可以理解为一个DOM,也就是一种特殊的HTML,它拥有自己的标记格式,抛砖引玉,希望大家提出批评和建议。
---------------------------------------------------分割线-----------------------------------------------------------
之前因为手误的原因,在本地的方法中加入了ds这个参数,后来发现文中完全没有用到这个参数,感谢@佩恩六道的指正,原文已经修改。
ADO.NET系列之操作XML的更多相关文章
- SimpleXML系列函数操作XML
创建SimpleXML对象 种方法来创建对象,分别是: l Simplexml_load_file()函数,将指定的文件解析到内存中. l Simplexml_load_string()函数,将创 ...
- WebService(2)-XML系列之用Stax操作Xml
源代码下载:链接: http://pan.baidu.com/s/1ntL1a7R password: rwp1 本文主要讲述:利用Stax处理xml文档 一.读取xml 1.基于光标的查找 核心:X ...
- ADO.NET系列之Connection对象
ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 ADO.NET概念 ADO ...
- sqlserver 操作xml
1.xml.exist 输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 2.xml.value 输入为XQuery表达式,返回一个SQL ...
- SQL Server 操作XML数据
.xml.exist 输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 .xml.value 输入为XQuery表达式,返回一个SQL Server标量 ...
- ADO.NET系列之Command对象
ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 上一篇<ADO.NE ...
- ADO.NET系列之DataAdapter对象
ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 我们前两篇文章介绍了ADO ...
- T-Sql操作Xml数据(转)
T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...
- shell编程系列23--shell操作数据库实战之mysql命令参数详解
shell编程系列23--shell操作数据库实战之mysql命令参数详解 mysql命令参数详解 -u 用户名 -p 用户密码 -h 服务器ip地址 -D 连接的数据库 -N 不输出列信息 -B 使 ...
随机推荐
- Hibernate4+Spring JPA+SpringMVC+Volecity搭建web应用(二)
SpringMVC.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...
- php使用位与运算符【&】位或运算符【|】实现权限管理
权限值是这样的2^0=1,相应2进数为”0001″(在这里^我表示成”次方”,即:2的0次方,下同)2^1=2,相应2进数为”0010″2^2=4,相应2进数为”0100″2^3=8,相应2进数为”1 ...
- 快速集成iOS基于RTMP的视频推流
前言 这篇blog是iOS视频直播初窥:<喵播APP>的一个补充. 因为之前传到github上的项目中没有集成视频的推流.有很多朋友简信和微博上问我推流这部分怎么实现的. 所以, 我重新集 ...
- postgres 正则表达式
PostgreSQL正则表达式 基础: Operator Description Example ~ Matches regular expression, case sensitive 'thoma ...
- Nodejs异步异常处理domain
前言 程序开发中,最麻烦的事情之一就是异常处理:对于Nodejs程序开发,最麻烦的事情莫过于异步异常处理. 以MVC的多层架构设计角度,异常总是要一层一层向上抛出,最后在客户端出打印错误.但是,Nod ...
- 15个让人惊讶的 CSS3 动画效果演示
CSS 是网页设计非常重要的一部分,随着越来越多的浏览器对 CSS3 支持的不断完善,设计师和开发者们有了更多的选择.如今,用纯 CSS 就可以实现各种各样很酷的效果,甚至是动画. 本文收集了15个惊 ...
- [转载]DataSet导入到Excel文件
/// <summary> /// 将数据导入到Excel /// </summary> /// <param name="ds"& ...
- 使用MediaPlayer播放音频-----之二
MediaPlayer播放不同来源的音频文件: 一.播放应用的资源文件 1.调用MediaPlayer的create(Context context , int resid)方法加载指定资源文件. ...
- 使用ContentObserve监听用户发出的短信
import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.app.Activit ...
- CentOS hadoop配置错误Incorrect configuration: namenode address dfs.namenode.servicerpc-address ...
# ./sbin/start-all.sh This script is Deprecated. Instead use start-dfs.sh and st ...