0

0

在.NET Framework中轻松处理XML数据(1-2)

黄舟

黄舟

发布时间:2016-12-20 14:02:57

|

1563人浏览过

|

来源于php中文网

原创

?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}', tabprefix, reader.name); 
??} 
??else 
??{ 
??//写结束标记,假如节点类型为元素 
??if (reader.nodetype == xmlnodetype.endelement) 
??{ 
??tabprefix = new string('\t', reader.depth); 
??writer.writeline('{0}', 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方法移动指针。 

以上就是在.net framework中轻松处理xml数据(1-2) 的内容,更多相关内容请关注php中文网(www.php.cn)! 

喵记多
喵记多

喵记多 - 自带助理的 AI 笔记

下载

相关专题

更多
Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

44

2026.01.15

公务员调剂条件 2026调剂公告时间
公务员调剂条件 2026调剂公告时间

(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。

58

2026.01.15

国考成绩查询入口 国考分数公布时间2026
国考成绩查询入口 国考分数公布时间2026

笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。

11

2026.01.15

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

65

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

36

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

75

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

21

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 6.8万人学习

python编程入门系列图文教程
python编程入门系列图文教程

共65课时 | 24.6万人学习

vscode其实很简单
vscode其实很简单

共72课时 | 28.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号