`
wfdoublext
  • 浏览: 126169 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

xml验证 转载

阅读更多

 

开发环境: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) XmlReaderSettingsValidationType属性设置为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类支持的验证类型。允许的验证类型是DTDXSDNone

ValidationEventHandler

指定事件处理程序,用于接收关于验证事件的信息

ValidationFlags

指定在验证XML数据时将被强制执行的附加的验证设置,如使用内嵌模式、身份约束和XML属性

Schemas

获得或者设置XmlSchemaSet对象,该对象表示用于执行模式验证的模式集合

 

为了能够使用XmlReaderSettings类来验证XML数据,必须将XmlReaderSettings类的属性设置为正确的值。这个类本身无法运行,而需要与XmlReader或者XmlNodeReader实例一同运行。您可以使用这个类并依据DTDXML模式进行验证。

3. 处理XML验证中的异常

在程序清单5-3中,只要出现了XML验证错误,控制就会自动转向ValidationEventHandler方法,来处理异常并将验证错误消息(通过ValidationEventArgs对象的Message属性获得)添加至StringBuilder对象。如果StringBuilder对象包含了所有消息,最后这个错误消息将会显示给用户。虽然这对本示例来说已经足够,但是很多时候您会想要区分不同的异常类型,如在验证过程中产生的警告或者错误。为了达到这个目的,可以检查ValidationEventArgs对象的Severity属性。这个属性返回XmlSeverityType类的枚举,可用于判断产生的异常类型。表5-3显示了这个枚举所包含的值。

5-3  XmlSeverityType枚举值

    

Error

指示在验证实例文档时出现了验证错误。这可以是使用DTDXSD模式的验证结果。如果没有验证事件处理程序来处理这种情况,将会抛出异常

Warning

指示验证解析器已经运行到一个没有错误但是有必要警告用户的情况之下。WarningError的不同之处是它不会在调用方法的应用程序中抛出异常

分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    Flex4权威指南+随书源代码+Flexbuild使用工具

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本资源内容包括: 1. Flex4权威指南电子书与此书的源代码 2. Flexbuild使用工具适用于4.6之前版本 电子书...

    java商品购物系统

    运用了XML应用,国际化,鼠标点击事件,系统托盘图标,中国大陆身份证验证算法(18位)等等。 注:国际化未完全,若你有兴趣可更改源码 &lt;br&gt;购物流程: 管理员---添加/删除/修改商品---订单管理---销售管理--管理...

    C++轻量级通用插件框架源码

    可以学习研究、任意修改改进,但不可以换成其他作者另外发布,转载时请列出来源。 有改进意见可在博客地址或者邮件中提出。 博客:http://www.cnblogs.com/rhcad 邮件:rhcad@hotmail.com 详细描述见 ...

    [原创]FavChat爱聊全能隐蔽穿透型聊天平台完整源码源程序包(Hedda)

    ■ 本平台的设计初衷其实是为方便我和妻子日常交流,大型企业里一般都限制即时通讯软件的使用,于是我运用所学开发了具备一定隐蔽性和系统热键功能的私人聊天工具,加上通用型的HTTP协议和XML节点内的密码验证,...

    手机QQ协议、3GQQ协议的SDK、QQ空间协议、webQQ协议

    取访客 相册相关:获取相册列表、获取照片列表、相册访客、相册问题验证 说说相关:获取说说列表、发表、评论、、回复、转发、赞 装扮相关:克隆空间装扮(代码和模块克隆)、克隆空间音乐、获取空间模块和背景音乐...

    asp.net知识库

    从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 ...

    制作第一个页面 欢迎您进入.Net启动运行

    Service 123. WEB服务概述以及HTTP\XML VS Web服务 124. 建立Web服务 125. 使用Web服务 126. 安全 127. 相关问题简述 128. 小结考试 配置和优化 129. 配置文件结构 130. 性能...

    GridView使用技巧一

    Service 123. WEB服务概述以及HTTP\XML VS Web服务 124. 建立Web服务 125. 使用Web服务 126. 安全 127. 相关问题简述 128. 小结考试 配置和优化 129. 配置文件结构 130. 性能...

    GridView使用技巧二

    Service 123. WEB服务概述以及HTTP\XML VS Web服务 124. 建立Web服务 125. 使用Web服务 126. 安全 127. 相关问题简述 128. 小结考试 配置和优化 129. 配置文件结构 130. 性能...

    最好的asp CMS系统科讯CMSV7.0全功能SQL商业版,KesionCMS V7.0最新商业全能版-免费下载

    33、水印缩略图,可按要求等比缩小,可按要求在指定位置加图片或文字水印,提升内容被转载后的宣传机会。 34、两种编辑器选择,可视化编辑器,类似word的所件即所得的在线内容编辑功能,支持表格、图片、FLASH、...

    js使用小技巧

    Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type ... 捕获释放 event.srcElement.setCapture();...event.srcElement.releaseCapture();... 根据鼠标获得元素: document....

    一个牛人提供的GIS源码(很好)

    特色二:部分搜索功能是通过搜索SQL输出XML来实现。 特色三:系统已经详细到每个楼房楼层的办公室以及办公室内的电话和教师名单、教学楼的班级以及课程表、宿舍的成员组成联系方式等。 特色四:空间数据库和属性...

    c语言数据结构字符串模式匹配算法.zip

    练习:求T=”AAAAAAAAAAB” 的模式函数值,并用后面的求模式函数值函数验证。 意义: next 函数值究竟是什么含义,前面说过一些,这里总结。 设在字符串S中查找模式串T,若S[m]!=T[n],那么,取T[n]的模式函数值next...

Global site tag (gtag.js) - Google Analytics