开发环境:VS2008
在.NET中说到验证XML,估计不少人会想到用类XmlValidatingReader,谁知在.NET2.0时此类已标记为已过时,取而代之的是XmlReaderSettings类,
此类其实很简单,使用时只需设置少数属性。
验证过程中代码相对简单,主要是有一些细节需要注意。
下面先介绍XmlReaderSettings类用到的两个属性
Schemas | 获取或设置在执行架构验证时使用的 XmlSchemaSet。 |
ValidationType | 获取或设置一个值,该值指示 XmlReader 在读取时是否执行验证或类型分配。 |
<?xml version="1.0" encoding="utf-8" ?> <!-- 注意默认命名空间,当XSD上有属性targetNamespace时, 此默认命名空间是必要的,而且必须和targetNamespace的值一样 --> <book xmlns="http://www.cnblogs.com/lucas/"> <title>书名</title> <price>12.99</price> </book>
<?xml version="1.0" encoding="utf-8"?> <xs:schema id="book" targetNamespace="http://www.cnblogs.com/lucas/" elementFormDefault="qualified" xmlns="http://tempuri.org/book.xsd" xmlns:mstns="http://tempuri.org/book.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" > <xs:element name="book"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string" /> <xs:element name="price" type="xs:decimal" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { XmlReaderSettings settings = new XmlReaderSettings(); //验证类型设置为模式(xsd) settings.ValidationType = ValidationType.Schema; //为XmlReaderSettings对象添加模式 //第一个参数是targetNamespace的值,null表示采用XSD文件里targetNamespace属性的值 //如果要明确传递此参数,务必与targetNamespace的值一致 //第二个参数一定要采用绝对路径或物理路径,不能采用相对路径 settings.Schemas.Add(null, Server.MapPath("book.xsd")); //添加验证错误的处理事件 settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler); //同理第一个参数必须是绝对路径或物理路径 XmlReader reader = XmlReader.Create(Server.MapPath("book.xml"), settings); while (reader.Read()) { } reader.Close(); this.ltlMsg.Text += "End"; } void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e) { this.ltlMsg.Text += e.Message + "<br />"; } }
1. 验证XML文档的步骤
(1) 定义一个ValidationEventHandler事件处理程序方法。
(2) 创建XmlReaderSettings对象的实例。XmlReaderSettings类允许指定一套由XmlReader对象支持的选项,并且这些选项将会在解析XML数据的时候起作用。请注意XmlReaderSettings生成废弃的XmlValidatingReader类(用于.NET 1.x版本)。
(3) 将前面定义好的ValidationEventHandler方法与XmlReaderSettings类相关联。
(4) 将XmlReaderSettings的ValidationType属性设置为ValidationType.Schema。
(5) 通过XmlReaderSettings类的Schema属性将XSD模式添加至XmlReaderSettings类。
(6) 在解析XML数据的时候,XmlReader类使用Read方法验证XML文档。
验证事件处理程序
ValidationEventHandler事件定义了一个事件处理程序,用于接收关于XSD模式验证错误的通知。验证的错误和警告通过ValidationEventHandler回调函数来报告。验证错误不会停止解析,解析只会在XML文档不是格式良好时停止。但是,如果您没有提供验证事件处理程序的回调函数并且发生了验证错误,将会抛出异常。使用验证事件回调机制捕获所有验证错误的这种方式可以在单步过程中发现所有的验证错误。
XML验证中XmlReaderSettings类的角色
XmlReaderSettings类和XmlReader类一样是最重要的类之一,它提供了验证XML数据的核心基础。表5-1提供了XmlReaderSettings类中验证相关属性的简要描述,本章后部分将会利用这些属性。
表5-1 验证X mlReaderSettings类的相关属性和事件
属 性
说 明
ProhibitDtd
指示XmlReaderSettings类是否支持DTD验证。默认值是true,表示不支持DTD验证
ValidationType
指定XmlReaderSettings类支持的验证类型。允许的验证类型是DTD、XSD和None
ValidationEventHandler
指定事件处理程序,用于接收关于验证事件的信息
ValidationFlags
指定在验证XML数据时将被强制执行的附加的验证设置,如使用内嵌模式、身份约束和XML属性
Schemas
获得或者设置XmlSchemaSet对象,该对象表示用于执行模式验证的模式集合
为了能够使用XmlReaderSettings类来验证XML数据,必须将XmlReaderSettings类的属性设置为正确的值。这个类本身无法运行,而需要与XmlReader或者XmlNodeReader实例一同运行。您可以使用这个类并依据DTD或XML模式进行验证。
3. 处理XML验证中的异常
在程序清单5-3中,只要出现了XML验证错误,控制就会自动转向ValidationEventHandler方法,来处理异常并将验证错误消息(通过ValidationEventArgs对象的Message属性获得)添加至StringBuilder对象。如果StringBuilder对象包含了所有消息,最后这个错误消息将会显示给用户。虽然这对本示例来说已经足够,但是很多时候您会想要区分不同的异常类型,如在验证过程中产生的警告或者错误。为了达到这个目的,可以检查ValidationEventArgs对象的Severity属性。这个属性返回XmlSeverityType类的枚举,可用于判断产生的异常类型。表5-3显示了这个枚举所包含的值。
表5-3 XmlSeverityType枚举值
值
描 述
Error
指示在验证实例文档时出现了验证错误。这可以是使用DTD和XSD模式的验证结果。如果没有验证事件处理程序来处理这种情况,将会抛出异常
Warning
指示验证解析器已经运行到一个没有错误但是有必要警告用户的情况之下。Warning和Error的不同之处是它不会在调用方法的应用程序中抛出异常
发表评论
-
兼容模式设置
2011-09-13 09:28 928为了最好的视觉效果,可以进行兼容模式设置,如不设置也可正 ... -
google地图图标
2011-01-17 17:09 20641.在指定位置指定 ... -
iefav
2010-09-17 10:14 0反对伐发放 -
fsda
2010-09-16 16:20 0fadfa -
book
2010-09-16 16:16 0rwe -
SQLdll
2010-09-16 16:13 0gsf -
内部排序算法
2010-04-28 07:57 678几种内部排序算法总结!(冒泡排序、快速排序、直接插入排序、 ... -
tree
2009-01-20 09:51 594tree -
iframe 父子窗体调用
2008-11-20 16:03 1500iframe 父窗口和子窗口的调用方法 Posted on ... -
table行列固定
2008-11-04 13:27 2293<html> <head> <s ... -
DHtml
2008-09-26 10:21 587dhtml -
group box
2008-07-02 13:18 1139关于Silverlight Silverlight 是一个跨浏 ... -
vml 饼图
2008-07-01 16:59 1757<html xmlns:v="urn:sche ... -
vml 折线图
2008-07-01 16:57 1982<HTML xmlns:v="urn:sche ... -
vml资料
2008-06-18 16:45 1964http://hi.baidu.com/greatmast ... -
前台图片效果
2008-06-18 14:29 1317<SPAN class="bold" ... -
锚点是什么?
2008-05-05 15:10 14631:锚点是什么?锚点也可以理解成为一种超级链接,只不过它是网页 ... -
webchart作图
2008-05-05 12:57 2194<%@ Import Namespace="S ... -
vml圆角,箭头(IE)
2008-05-05 12:51 2733<HTML xmlns:v> <HEAD& ...
相关推荐
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本资源内容包括: 1. Flex4权威指南电子书与此书的源代码 2. Flexbuild使用工具适用于4.6之前版本 电子书...
运用了XML应用,国际化,鼠标点击事件,系统托盘图标,中国大陆身份证验证算法(18位)等等。 注:国际化未完全,若你有兴趣可更改源码 <br>购物流程: 管理员---添加/删除/修改商品---订单管理---销售管理--管理...
可以学习研究、任意修改改进,但不可以换成其他作者另外发布,转载时请列出来源。 有改进意见可在博客地址或者邮件中提出。 博客:http://www.cnblogs.com/rhcad 邮件:rhcad@hotmail.com 详细描述见 ...
■ 本平台的设计初衷其实是为方便我和妻子日常交流,大型企业里一般都限制即时通讯软件的使用,于是我运用所学开发了具备一定隐蔽性和系统热键功能的私人聊天工具,加上通用型的HTTP协议和XML节点内的密码验证,...
取访客 相册相关:获取相册列表、获取照片列表、相册访客、相册问题验证 说说相关:获取说说列表、发表、评论、、回复、转发、赞 装扮相关:克隆空间装扮(代码和模块克隆)、克隆空间音乐、获取空间模块和背景音乐...
从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 ...
Service 123. WEB服务概述以及HTTP\XML VS Web服务 124. 建立Web服务 125. 使用Web服务 126. 安全 127. 相关问题简述 128. 小结考试 配置和优化 129. 配置文件结构 130. 性能...
Service 123. WEB服务概述以及HTTP\XML VS Web服务 124. 建立Web服务 125. 使用Web服务 126. 安全 127. 相关问题简述 128. 小结考试 配置和优化 129. 配置文件结构 130. 性能...
Service 123. WEB服务概述以及HTTP\XML VS Web服务 124. 建立Web服务 125. 使用Web服务 126. 安全 127. 相关问题简述 128. 小结考试 配置和优化 129. 配置文件结构 130. 性能...
33、水印缩略图,可按要求等比缩小,可按要求在指定位置加图片或文字水印,提升内容被转载后的宣传机会。 34、两种编辑器选择,可视化编辑器,类似word的所件即所得的在线内容编辑功能,支持表格、图片、FLASH、...
Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type ... 捕获释放 event.srcElement.setCapture();...event.srcElement.releaseCapture();... 根据鼠标获得元素: document....
特色二:部分搜索功能是通过搜索SQL输出XML来实现。 特色三:系统已经详细到每个楼房楼层的办公室以及办公室内的电话和教师名单、教学楼的班级以及课程表、宿舍的成员组成联系方式等。 特色四:空间数据库和属性...
练习:求T=”AAAAAAAAAAB” 的模式函数值,并用后面的求模式函数值函数验证。 意义: next 函数值究竟是什么含义,前面说过一些,这里总结。 设在字符串S中查找模式串T,若S[m]!=T[n],那么,取T[n]的模式函数值next...