在.NETFramework中轻松处理XML数据(1-2)
作者:流云清动_438 | 来源:互联网 | 2014-05-04 00:08
?XmlReader类??XML浏览器支撑一个编程接口,接口用于连接XML文档,“推出”你要的数据。假如你更深进往懂得浏览器,你会发明浏览器工作原理类似于我们的桌面利用程序从数据库
?XmlReader类 ??XML浏览器支撑一个编程接口,接口用于连接XML文档,“推出”你要的数据。假如你更深进往懂得浏览器,你会发明浏览器工作原理类似于我们的桌面利用程序从数据库中取出数据的原理。数据库服务返回一个游标对象,它包含所有查询成果集,并返回指向目标数据集的开端地址的引用。XML浏览器的客户端收到一个指向浏览器实例的引用。该实例提取底层的数据流并把取出的数据浮现为一棵XML树。浏览器类供给只读、向前的游标,你可以用浏览器类供给的方法转动游标遍历成果集中的每一条数据。 ??从浏览器中看XML文档不是一个标签文本文件,而是一个序列化的节点聚集。它是.NET Framework中的一种特别的游标模式;在.NET Framework中,你找不到其它的任何一个类似的API函数。 ??浏览器和XMLDOM分析器有几点不同的处所。XML浏览器是只进的,它没有父、子、祖宗、兄弟节点的概念,而且是只读的。在.NET Framework中,读写XML文档是分为两种完整不同的功效,分辨由XmlReader和XmlWriter类来完成。要编纂XML文档,你可以用XMLDOM分析器,或者你自己设计一个类来实现这两种功效。让我们开端分析浏览器的程序功效。 ??XmlReader是一个抽象类,你可以持续并扩大它的功效。用户程序一般都基于下面的三种类:XmlTextReader、XmlValidatingReader或者 XmlNodeReader类。所有的这些类都有如图一的属性和图二的方法。要留心的是,某些属性的值实际上依附于实际的某个浏览器类,不同的类与基类可能不同。因此,在图一中每个属性的阐明都是以基类为准的。例如,CanResolveEntity属性在XmlValidatingReader类中只返回true;而在其它的浏览器类中它却可以设为false。同样的,在图二中的某些方法的实际返回值对不同的类可能不同。例如,假如节点类型不是元素节点(element node),所有包含Atrributes的方法的返回值类型都是void。 ??XmlTextReader类用只进,只读的方法快速拜访XML数据流。浏览器先验证XML文档是否是格局良好的,假如不是则抛出一个异常。XmlTextReader 检查 DTD 的格局是否良好,但不应用 DTD 对文档进行验证。XmlTextReader通过XML文档的文件名,或它的URL,或者从文件流中载进XML文档,然后快速的处理XML文档数据。假如你需要对文档的数据进行验证,你可以用XmlValidatingReader类。 ??可以用多种方法创立XmlTextReader类的实例,从硬盘中加载文件,或从URL地址中加载,流(streams)中加载,还有就是从文本中读进XML文档数据: ??XmlTextReader reader = new XmlTextReader(file); ??留心,所有XmlTextReader类的公共(public)结构函数都请求你指定数据源,数据源可以是stream、文件或者其它。XmlTextReader默认的结构函数是受保护的(protected),所以不能直接应用。像.NET Framework中所有的浏览器类一样(如SqlDataReader类),一旦浏览器对象连接并打开,你就可以用Read方法往拜访数据了。开端的时候只能用Read方法把指针移到第一个元素;然后我们可以用Read方法或其它方法(如Skip, MoveToContent和ReadInnerXml)移动指针到下一个节点元素。要处理全部XML文档的内容,可以根据Read方法的返回值用一个循环遍历文档内容,由于Read方法返回一个布尔值,当读到文档的尾节点时,Read方法返回false,否则它返回true。 ??Figure 3 Outputting an XML Document Node Layout ??string GetXmlFileNodeLayout(string file) ??{ ??// 创立一个XmlTextReader类使它指向目标XML文档 ??XmlTextReader reader = new XmlTextReader(file); ??// 循环取出节点的文本并放进到StringWriter对象实例中 ??StringWriter writer = new StringWriter(); ??string tabPrefix = ''; ??while (reader.Read()) ??{ ??// 写开端标记,假如节点类型为元素 ??if (reader.NodeType == XmlNodeType.Element) ??{ ??//根据元素所处节点的深度,参加reader.Depth个tab符,然后把元素名写进到<>中。 ??tabPrefix = new string('\t', reader.Depth); ??writer.WriteLine('{0}<{1}>', tabPrefix, reader.Name); ??} ??else ??{ ??//写结束标记,假如节点类型为元素 ??if (reader.NodeType == XmlNodeType.EndElement) ??{ ??tabPrefix = new string('\t', reader.Depth); ??writer.WriteLine('{0}{1}>', tabPrefix, reader.Name); ??} ??} ??} ??// 输出到屏幕 ??string buf = writer.ToString(); ??writer.Close(); ??// 封闭流 ??reader.Close(); ??return buf; ??} ??图三演示了一个简略的用于输出一个给定的XML文档的节点元素的函数。该函数先打开一个XML文档,然后用循环处理XML文档中所有的内容。每次调用Read方法,浏览器的指针都会向下移一个节点。大部分情况下,用Read方法可以处理的元素节点,但有时候,当你从一个节点移动到下一个节点时,可能是在两个不同类型的节点间移动。但是Read方法不能在属性节点之间移动。浏览器的MoveToContent方法可以让指针从头部节点地位跳到第一个内容节点地位。在ProcessingInstruction, DocumentType, Comment, Whitespace和SignificantWhitespace类型节点中也可以用Skip方法移动指针。
推荐阅读
在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ...
[详细]
蜡笔小新 2024-10-31 21:03:29
在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ...
[详细]
蜡笔小新 2024-11-01 11:37:01
Issue with the Reserved Term HOSTS in System Configuration ...
[详细]
蜡笔小新 2024-11-01 01:55:21
开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用 ...
[详细]
蜡笔小新 2024-10-31 20:30:19
深入解析:Explain命令的应用与字段详解 ...
[详细]
蜡笔小新 2024-10-31 20:06:25
本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ...
[详细]
蜡笔小新 2024-10-31 19:54:38
许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ...
[详细]
蜡笔小新 2024-10-31 19:32:40
在数据仓库架构中,缓慢变化维度(SCD)是一种广泛应用的技术手段。该技术处理的是那些随时间逐步变化的维度属性,确保在进行商业智能(BI)分析时能够准确反映特定历史时间点的数据状态。通过合理设计SCD,可以有效提升数据仓库的性能与准确性,同时简化数据管理和维护流程。 ...
[详细]
蜡笔小新 2024-10-31 19:15:50
本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ...
[详细]
蜡笔小新 2024-10-31 18:23:35
在Ubuntu系统中,由于预装了MySQL,因此无需额外安装。通过命令行登录MySQL时,可使用 `mysql -u root -p` 命令,并按提示输入密码。常见问题包括:1. 错误 1045 (28000):访问被拒绝,这通常是由于用户名或密码错误导致。为确保顺利连接,建议检查MySQL服务是否已启动,并确认用户名和密码的正确性。此外,还可以通过配置文件调整权限设置,以增强安全性。 ...
[详细]
蜡笔小新 2024-10-31 17:57:01
本文详细介绍了如何利用Python的Turtle库高效绘制矩形图形,适合初学者快速上手。通过具体示例代码,帮助读者理解Turtle库的基本绘图方法和技巧,同时探讨了在不同应用场景中绘制矩形的实际操作,为后续复杂图形的绘制打下坚实基础。 ...
[详细]
蜡笔小新 2024-10-31 17:36:41
在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ...
[详细]
蜡笔小新 2024-10-31 16:58:11
本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ...
[详细]
蜡笔小新 2024-10-31 16:12:02
在主从复制架构中,Bingo_MySQL 同步工具的应用与优化具有重要意义。为确保高效同步,建议使用相同或兼容的 MySQL 版本,并确保两台服务器位于同一局域网内,且网络连接畅通无阻。若无法 ping 通,请检查 IP 配置及防火墙设置,以保证网络连通性。此外,合理的配置参数和定期维护也是提升同步性能的关键因素。 ...
[详细]
蜡笔小新 2024-10-31 14:59:18
掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ...
[详细]
蜡笔小新 2024-10-31 14:51:01