我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#中怎么利用XMLTextReader类读取XML文档

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#中怎么利用XMLTextReader类读取XML文档

今天就跟大家聊聊有关C#中怎么利用XMLTextReader类读取XML文档,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

C#读取XML文档之在.NET框架的System.XML名称空间中包含的XMLTextReader类不需要对系统资源要求很高,就能从XML文件中快速读取数据。使用XMLTextReader类能够从XML文件中读取数据,并且将其转换为HTML格式在浏览器中输出。

读本文之前,读者需要了解一些基本知识:XML、HTML、C#编程语言,以及.NET尤其是ASP.NET框架的一些知识。

C#读取XML文档的解决为目的,微软公司的.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文件。

本文主要讲述的C#读取XML文档的方法是***个类XMLTextReader,这个类设计的目的就是从XML文件中快速的读取数据,而对系统资源(主要包括内存和处理器时间)不做很高的要求。在父级程序的控制下,它通过每次只处理一个节点的方式对XML文件进行逐步操作,实现这种工作过程。在XML文件的每个节点中,父级程序能决定该节点的类型,它的属性和数据(如果有的话),以及其他有关该节点的信息。基于这些信息,父级程序可以选择是处理这个节点还是忽略该节点的信息,以满足各种应用程序请求的需要。这被称为抽取式(pull)处理模型,因为父级程序发出请求并且从XML文件中抽取各个节点,然后根据需要处理它或者是不处理它。

我们可以把XMLTextReader类和XML简单应用程序接口,即SAX相比,后者是在编程人员中非常流行的另一种读取XML数据的技术。XMLTextReader 和SAX有一点很相似,它们都不需要占用很多的系统资源,就能迅速的从XML文件读取数据。但是,与XMLTextReader的抽取式模型迥然不同,SAX使用的是推入式模型:XML处理器通过 “事件”告知主机应用程序哪些节点数据是可以获得,那些不能获得;根据需要,主机程序则作出相应的反应或置之不理。换句话说,数据的传送方向是从SAX处理程序中推入到主机。程序员们势必会在抽取式和推入式处理模型谁更有优势的问题上争论一番,但是大家都不可否认的是,两种模型都能很好的进行工作。.NET 框架不支持SAX,但是你能使用现存的SAX工具, 例如 MSXML分析器,用于你的.NET 程序。

C#读取XML文档之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﹥

C#读取XML文档之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块中),就像你以后在演示程序中看到的一样。

本文只是一篇相当简单的介绍C#读取XML文档之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 框架的类在C#读取XML文档方面如何呢?比如XMLDocument类在读取XML数据方面表现如何呢?XMLDocument 类与XMLTextReader 类不同,它在存储器中创建整个XML文档的节点树。这样就可以随机的获得XML数据(与XMLTextReader 类获得数据的线性方式正好相反),并且在修改XML文件的数据和结构时,具有非常***的灵活性。另外,XMLDocument允许执行XSLT 转变,不过,这些额外的功能是以运行速度的降低和系统资源的更多占用为代价的。

C#读取XML文档使用XMLTextReader类代码段: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﹥  ﹤h3﹥演示XmlTextReader类﹤/h3﹥  ﹤div id="output" runat="server"/﹥  ﹤/body﹥  ﹤/html﹥      static void Main(string[] args)          {              DateTime d1 =DateTime.Now;              XmlDocumentTest();              DateTime d2 =DateTime.Now;              TimeSpan ts =d2-d1 ;                            Console.WriteLine(ts.TotalMilliseconds) ;                  Console.Read() ;           }            public static string XmlFileName = "../../XML/1.xml";                    private static void XmlTextReaderTest()          {              XmlTextReader reader = new XmlTextReader(XmlFileName);              while (reader.Read() )              {                  bool exit =false;                  switch(reader.NodeType)                  {                      case XmlNodeType.Element :                          break;                      case XmlNodeType.Text :                          if (reader.Value=="last")                          {                              exit=true;                          }                          break;                      case XmlNodeType.EndElement  :                         break;                      default:                         break;                  }                  if(exit)                  {                      return;                                        }               }          }           private static void XmlDocumentTest()          {              XmlDocument xd =new XmlDocument() ;             xd.Load(XmlFileName) ;              XmlNode node = xd.SelectSingleNode("/people/person[category='last']");               Console.Write(node.Name) ;          }

看完上述内容,你们对C#中怎么利用XMLTextReader类读取XML文档有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#中怎么利用XMLTextReader类读取XML文档

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#中怎么利用XMLTextReader类读取XML文档

今天就跟大家聊聊有关C#中怎么利用XMLTextReader类读取XML文档,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#读取XML文档之在.NET框架的System.XML名称
2023-06-18

C#怎么读取Xml文档

这篇文章主要讲解了“C#怎么读取Xml文档”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么读取Xml文档”吧!C# 操作XML之读取Xml的作用:如果我们有现成的Xml文档,那么,我们
2023-06-17

C#怎么读取XML文件

这篇文章主要讲解了“C#怎么读取XML文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么读取XML文件”吧!用C#读取XML文件源程序代码,具体如下:using System ;
2023-06-17

C++中怎么使用TinyXML读取xml文件

这篇文章主要介绍了C++中怎么使用TinyXML读取xml文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++中怎么使用TinyXML读取xml文件文章都会有所收获,下面我们一起来看看吧。前言TinyXML
2023-07-02

C#怎么读取word文档

本篇内容主要讲解“C#怎么读取word文档”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么读取word文档”吧!C#读取word文档是如何实现的呢?我们可以使用FileStream对象来把
2023-06-17

Qt如何利用DOM类实现读取xml文件

今天小编给大家分享一下Qt如何利用DOM类实现读取xml文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、项目介绍利用D
2023-07-02

C#中怎么生成XML元素或XML文档

这篇文章主要讲解了“C#中怎么生成XML元素或XML文档”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#中怎么生成XML元素或XML文档”吧!一、概述Overview - LINQ to
2023-06-30

C#中怎么利用Access读取mdb

这期内容当中小编将会给大家带来有关C#中怎么利用Access读取mdb,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#操作Access主要知识点如下:using System.Data.OleDb;
2023-06-17

C#中怎么编写XML文档注释

在C#中,可以使用特殊的注释格式编写XML文档注释,以便生成XML文档。XML文档注释以三个斜杠“///”开始,后面可以跟着一段描述性的注释内容,例如:/// /// This method adds two numb
C#中怎么编写XML文档注释
2024-03-07

C#中怎么创建一个XML文档

本篇文章为大家展示了C#中怎么创建一个XML文档,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.创建一个XML文档:这一点和***种方法一样,在这里就不介绍了。2.通过"XmlDocument"类
2023-06-17

怎么使用Python读取xml文件

本篇内容介绍了“怎么使用Python读取xml文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 什么是xml?xml即可扩展标记语言,它可
2023-07-06

Android中的Xml 文档怎么利用XmlPullParser 进行解析

这期内容当中小编将会给大家带来有关Android中的Xml 文档怎么利用XmlPullParser 进行解析 ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android XmlPullParser 方式
2023-05-31

怎么用dom4j读取xml配置文件

本篇内容主要讲解“怎么用dom4j读取xml配置文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用dom4j读取xml配置文件”吧!实现步骤以及源码:1、写xml文件读取类读取xml文档内
2023-06-03

怎么用php读取word文档内容

要使用PHP读取Word文档内容,可以使用PHPWord库。以下是一个简单的示例:首先,你需要在PHP项目中引入PHPWord库。可以通过Composer安装,或者从官方网站下载并解压到项目目录中。创建一个新的PHP文件,导入PHPWord
2023-10-25

C#怎么设置、删除、读取Word文档背景

这篇文章主要讲解了“C#怎么设置、删除、读取Word文档背景”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么设置、删除、读取Word文档背景”吧!Spire.Cloud.Word.Sd
2023-06-03

C#中怎么读取文本文件

C#中怎么读取文本文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#读文本文件的解答:/* using System.IO; StreamReader sr = n
2023-06-18

C++中怎么利用LeetCode读取N个字符

这期内容当中小编将会给大家带来有关C++中怎么利用LeetCode读取N个字符,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。[LeetCode] 158. Read N Characters Given
2023-06-20

C++中怎么读取CSV文件

今天就跟大家聊聊有关C++中怎么读取CSV文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。***个函数:计算一个字符串中的某个子串的个数int strstr_cnt(const c
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录