仓酷云
标题:
ASP网页设计XMLTextReader和XmlDocument读取XML文件...
[打印本页]
作者:
萌萌妈妈
时间:
2015-2-3 23:31
标题:
ASP网页设计XMLTextReader和XmlDocument读取XML文件...
问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.xml|对照 看到网上一片文章,本人式了一下,公然 XMLTextReader速度要快!
在.NET框架的System.XML称号空间中包括的XMLTextReader类不需求对体系资本请求很高,就可以从XML文件中疾速读取数据。利用XMLTextReader类可以从XML文件中读取数据,而且将其转换为HTML格局在阅读器中输入。
读本文之前,读者需求懂得一些根基常识:XML、HTML、C#编程言语,和.NET特别是ASP.NET框架的一些常识。
微软公司的.NET框架为开辟者供应了很多开辟的便当,跟着XML的主要性不休增加,开辟者们都等候着有一整套功效壮大的XML东西被开辟出来。.NET框架没有孤负咱们的这番希冀,在System.XML 称号空间中组织进了以下几个用于XML的类:
XMLTextReader------供应以疾速、单向、无缓冲的体例存取XML数据。(单向意味着你只能夙昔往后读取XML文件,而不克不及逆向读取)
XMLValidatingReader------与XMLTextReader类一同利用,供应验证DTD、XDR和XSD架构的才能。
XMLDocument------遵守W3C文档对象模子标准的一级和二级尺度,完成XML数据随机的、有缓存的存取。一级程度包括了DOM的最根基的局部,而二级程度增添多种改善,包含增添了对称号空间和级连状图表(CSS)的撑持。
XMLTextWriter------生成遵守 W3C XML 1.0 标准的XML文件。
本文次要讲述的是第一个类XMLTextReader,这个类设计的目标就是从XML文件中疾速的读取数据,而对体系资本(次要包含内存和处置器工夫)不做很高的请求。在父级法式的掌握下,它经由过程每次只处置一个节点的体例对XML文件停止慢慢操作,完成这类任务进程。在XML文件的每一个节点中,父级法式能决意该节点的类型,它的属性和数据(假如有的话),和其他有关该节点的信息。基于这些信息,父级法式可以选择是处置这个节点仍是疏忽该节点的信息,以知足各类使用法式恳求的需求。这被称为抽取式(pull)处置模子,由于父级法式收回恳求而且从XML文件中抽取各个节点,然后依据需求处置它或是不处置它。
咱们可以把XMLTextReader类和XML复杂使用法式接口,即SAX比拟,后者是在编程人员中十分盛行的另外一种读取XML数据的手艺。XMLTextReader 和SAX有一点很类似,它们都不需求占用良多的体系资本,就可以敏捷的从XML文件读取数据。然而,与XMLTextReader的抽取式模子迥然分歧,SAX利用的是推入式模子:XML处置器经由过程 “事务”告诉主机使用法式哪些节点数据是可以取得,那些不克不及取得;依据需求,主机法式则作出响应的反响或充耳不闻。换句话说,数据的传送偏向是从SAX处置法式中推入到主机。法式员们必将会在抽取式和推入式处置模子谁更有优势的成绩上争辩一番,然而人人都不成否定的是,两种模子都能很好的停止任务。.NET 框架不撑持SAX,然而你能利用现存的SAX东西, 例如 MSXML剖析器,用于你的.NET 法式。
XMLTextReader 类有一些机关法式来顺应各类各样的情形,好比从一个已存在的数据流或一致资本定位网址读取数据。最多见的是,你也许想从一个文件读取XML数据,那末也就有一个响应的机关法式来为此办事。这里有一个例子(我的一切代码例子都利用的是C#言语,假如你喜好利用VISUAL BASIC言语,它们转换起来很轻易)。
XMLTextReader myReader;
myReader = New XMLTextReader("c:\data\sales.XML")
创立一个称为Read()办法的轮回,这个办法的前往值老是为真,直到抵达文件的底部时,前往值才变成假。换句话说, 轮回在文件的入手下手时启动而且读入一切的节点, 一次读入一个节点, 直到抵达文件的开头:
While (myReader.Read()) {
...
// 在这里处置每一个节点.
...
}
每次胜利挪用Read()以后,XMLTextReader实例化法式包括了今朝节点(即方才从文件中读取的谁人节点)的信息。咱们可以从XMLTextReader的成员中取得上述信息,就像表格1中描写的一样;并经由过程NodeType属性判别出以后节点的类型。在节点类型的基本上,法式的代码可以读取节点数据,反省它是不是有属性,究竟是疏忽它仍是依据法式需求停止响应的操作和处置。
当利用NodeType属性时,了解节点怎样接洽到XML单位长短常主要的。例如, 看以下 XML元素:
<city>Chongqing</city>
XMLtextReader 把这个元素看做 3 个节点,按次以下:
1.<city>标签被读为类型 XMLNodeType.Element 节点,元素的名字“city”可从 XMLTextReader 的Name属性中取得。
2.文本数据“Chongqing”被读为类型为XMLNodeType.Text的节点。数据“Chongqing ” 可从XMLTextReader 的Value属性中获得。
3.</city>标签被读为类型为XMLNodeType.EndElement 节点。一样,元素的称号“city”可从XMLTextReader的Name属性中取得。
这是 3 种主要的节点类型,其它的类型在.NET的申明文档中有具体申明,请人人参阅相干材料。
假如XMLTextReader碰到一个毛病, 例如呈现违背XML句法的情形,它抛出一个System.XML.XMLException类型的异常。利用这个类的代码应当老是被回护 ( 在Try……Catch块中),就像你今后在演示法式中看到的一样。
本文只是一篇相当复杂的引见XMLTextReader 类的文章,XMLTextReader类有相当多的成员,在这里不成能逐一述及。当读入XML数据时,XMLTextReader能供应相当强的天真性。即使如斯,我依然停止了大批的论说,以包管读者能编制法式来完成实际世界中常常请求完成的义务,也就是从一个XML文件读取数据然后以HTML的格局输入,从而完成在阅读器中的显示。
这个ASP.NET法式(剧本)在办事器上运转并发生一个HTML页面前往阅读器。这段剧本法式在代码段 1 给出,它用来任务利用的 XML 数据文件在代码段 2给出。你能看到这个 XML 文件包括一份暗示关联的列表;法式的方针便是将这个列表显示出来,为了更轻易咱们察看,这些列表已被格局化了。
运转法式:
1. 将代码段1存为XMLTextReader.ASPx文件,将代码段2存为XMLData.XML文件。
2. 把这两个文件都放在一个已装置好.NET 框架的收集办事器的虚拟文件夹中。
3. 翻开 Internet Explorer 而且阅读这个ASPx文件,例如,在一个局域网办事器上, URL 将是 http://localhost/xmltextreader.ASPx ;。
法式任务的大局部都由XMLDisplay 类来做,特别是被ProcessXML()办法完成的。它每次读取一个节点XML数据,关于感乐趣的元素,节点数据和后跟冒号的节点名将和响应的HTML格局化标签一同写入输入了局中。在这阶段,“输入了局”由一个HTML文本临时贮存在个中的StringBuilder对象组成。
ProcessXML()办法是从LoadDocument()办法挪用的。这个办法履行的义务是发生一个XMLTextReader实例化法式并在挪用ProcessXML之前装载XML文件。它同时也处置异常,随后发生毛病的信息并在阅读器中显示出来。终究该办法前往一个字符串,这个字符串或包括发生的HTML内容,或假如异常产生的话就包括失足信息,。
法式履行以Page_Load()法式入手下手,当阅读器恳求阅读这个页面时,这一步会主动履行。这里的代码实例化了XMLDisplay 类并挪用它的LoadDocument()办法。假如一切运转正常的话,格局化的HTML模式的前往值将被拷贝到页面的一个<div>标签中,生成的HTML文档被送回到阅读器中并显示出来。
其他的.NET 框架的类,好比XMLDocument类在读取XML数据方面体现若何呢?XMLDocument 类与XMLTextReader 类分歧,它在存储器中创立全部XML文档的节点树。如许就能够随机的取得XML数据(与XMLTextReader 类取得数据的线性体例正好相反),而且在修正XML文件的数据和布局时,具有十分完善的天真性。别的,XMLDocument答应履行XSLT 改变,不外,这些额定的功效是以运转速度的下降和体系资本的更多占用为价值的。
代码段1:XmlTextReader.aspx
<%@ Import Namespace="System.Xml" %>
<script language="C#" runat=server>
public class XmlDisplay
file://这个类读入并处置XML文件。
{
public string LoadDocument(String XmlFileName) {
XmlTextReader xmlReader = null;
StringBuilder html = new StringBuilder();
try {
file://创立XMLTextReader的实例。
xmlReader = new XmlTextReader(XmlFileName);
// 处置XML文件
html.Append(ProcessXml(xmlReader));
}
catch (XmlException ex){
html.Append("产生一个XML异常:" +
ex.ToString());
}
catch (Exception ex){
html.Append("产生一个通俗异常:" +
ex.ToString());
}
finally
{
if (xmlReader != null)
xmlReader.Close();
}
return html.ToString();
}
private string ProcessXml(XmlTextReader xmlReader)
{
StringBuilder temp = new StringBuilder();
file://这个办法读入XML文件并生成输入的HTML文档。
while ( xmlReader.Read() )
{
// 处置一个元素节点的肇端。
if (xmlReader.NodeType == XmlNodeType.Element)
{
file://疏忽<people>和<person>元素
if ((xmlReader.Name != "person") && (xmlReader.Name != "people"))
{
file://假如是一个<category>元素,入手下手一个新的段落
if ( xmlReader.Name == "category" )
temp.Append("<p>");
file://添加元素名到输入中
temp.Append( xmlReader.Name + ": " );
}
}
// 处置文本节点
else if (xmlReader.NodeType == XmlNodeType.Text)
temp.Append(xmlReader.Value + "<br>");
file://处置元素节点的开头
else if (xmlReader.NodeType == XmlNodeType.EndElement)
{
file://假如是<email>节点,添加停止段落的标志
if ( xmlReader.Name == "email" )
temp.Append("</p>");
}
}//停止while轮回
return temp.ToString();
} file://停止ProcessXML办法
} file://停止XmlDisplay类
private void Page_Load(Object sender, EventArgs e){
file://创立XmlDisplay类的实例
XmlDisplay XmlDisplayDemo = new XmlDisplay();
output.InnerHtml = XmlDisplayDemo.LoadDocument(Server.MapPath("XMLData.xml"));
}
</script>
<html>
<head>
</head>
<body>
<h2>演示XmlTextReader类</h2>
<div id="output" runat="server"/>
</body>
</html>
1 static void Main(string[] args)
2 {
3 DateTime d1 =DateTime.Now;
4 XmlDocumentTest();
5 DateTime d2 =DateTime.Now;
6 TimeSpan ts =d2-d1 ;
7
8 Console.WriteLine(ts.TotalMilliseconds) ;
9 Console.Read() ;
10
11 }
12
13
14 public static string XmlFileName = "../../XML/1.xml";
15
16 private static void XmlTextReaderTest()
17 {
18 XmlTextReader reader = new XmlTextReader(XmlFileName);
19 while (reader.Read() )
20 {
21 bool exit =false;
22 switch(reader.NodeType)
23 {
24 case XmlNodeType.Element :
25 break;
26 case XmlNodeType.Text :
27 if (reader.Value=="last")
28 {
29 exit=true;
30 }
31 break;
32 case XmlNodeType.EndElement :
33 break;
34 default:
35 break;
36 }
37 if(exit)
38 {
39 return;
40
41 }
42
43 }
44 }
45
46 private static void XmlDocumentTest()
47 {
48 XmlDocument xd =new XmlDocument() ;
49 xd.Load(XmlFileName) ;
50 XmlNode node = xd.SelectSingleNode("/people/person[category='last']");
51 Console.Write(node.Name) ;
52 }
专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。
作者:
再现理想
时间:
2015-2-4 00:47
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
作者:
爱飞
时间:
2015-2-9 08:44
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
作者:
兰色精灵
时间:
2015-2-27 04:20
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
作者:
小女巫
时间:
2015-3-1 20:58
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
作者:
仓酷云
时间:
2015-3-10 23:40
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
作者:
蒙在股里
时间:
2015-3-13 22:40
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
作者:
冷月葬花魂
时间:
2015-3-16 22:13
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
作者:
因胸联盟
时间:
2015-3-23 04:13
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
作者:
金色的骷髅
时间:
2015-3-24 23:33
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
作者:
简单生活
时间:
2015-3-27 19:54
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
作者:
小魔女
时间:
2015-4-11 00:09
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
作者:
愤怒的大鸟
时间:
2015-4-12 23:59
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
作者:
海妖
时间:
2015-4-14 16:28
下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...
作者:
谁可相欹
时间:
2015-4-21 12:20
作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。
作者:
若天明
时间:
2015-4-25 04:48
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
作者:
山那边是海
时间:
2015-4-26 08:12
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
作者:
莫相离
时间:
2015-4-29 04:27
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
作者:
小妖女
时间:
2015-5-6 13:10
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
作者:
第二个灵魂
时间:
2015-5-6 16:11
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2