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) 将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的不同之处是它不会在调用方法的应用程序中抛出异常

### Python 实现人脸识别的转载教程或文章 以下是关于如何使用 Python 进行人脸识别的一些常见方法和技术细节: #### 使用 OpenCV 库实现基础人脸识别 OpenCV 是一个强大的计算机视觉库,支持多种编程语言,包括 Python。它提供了简单易用的功能来检测图像中的人脸位置[^2]。 ```python import cv2 # 加载图片并将其转换为灰度图 image = cv2.imread('example.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 初始化 Haar Cascade 分类器 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # 检测人脸 detected_faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) # 绘制矩形框标记每张检测到的脸部区域 for (x, y, w, h) in detected_faces: cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.imshow('Detected Faces', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码展示了如何加载一张图片并通过 OpenCV 的 `CascadeClassifier` 来定位其中的人脸,并绘制边界框显示结果[^2]。 #### Django Web 应用人脸识别登录功能的设计思路 对于希望集成人脸识别作为身份验证手段的应用程序来说,Django 提供了一个灵活而安全的选择。通过结合前端摄像头捕获视频流以及后端服务器上的模型推理过程,可以构建一套完整的解决方案[^1]。 具体而言,在客户端部分可以通过 HTML5 Video API 获取实时影像数据传输给服务端;而后者的逻辑则主要依赖于像 dlib 或者 TensorFlow/Keras 构建更复杂的神经网络架构来进行精准匹配操作[^1]。 #### 更高级别的工具——Face Recognition Library 除了原始级别的特征提取外,“face_recognition”包进一步简化了整个流程,允许开发者仅需几行命令即可完成编码工作[^3]: ```python import face_recognition from PIL import Image, ImageDraw known_image = face_recognition.load_image_file("person1.jpg") unknown_image = face_recognition.load_image_file("unknown_person.jpg") biden_encoding = face_recognition.face_encodings(known_image)[0] unknown_encoding = face_recognition.face_encodings(unknown_image)[0] results = face_recognition.compare_faces([biden_encoding], unknown_encoding) print(f"Is the person known? {results}") ``` 此脚本会读取两张照片并将它们转化为数值向量表示形式以便比较相似程度从而判断是否属于同一个人物实例[^3]. --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值