C#温故而知新学习系列之XML编程—XmlValidatingReader类对XML文档验证(七)
阅读目录
一:前言
二:实现步骤
三:运行效果
前言
XML文档验证是指表示这个XML文档是否符合规则,是否是个正确的XML文档,我们这里讲使用XmlValidatingReader类对XML文档验证,该类通过实现W3C建议所定义的有效性约束DTD,数据简化XDR,XML架构定义语言XSD验证服务。如果验证通过了证明这个XML文档是有效的,否则是无效的。
XmlValidatingReader类实现XmlReader类,并以只进的方式对XML流进行验证。
先看下面这张XML架构图,图里面描述了<BookShop>元素下的子元素必须为<Book>,本来闭合标签应该是<Book>,而我们却写成了<Boo>,我们来看这个错误的XML文档能否通过验证呢。
二:实现步骤
1:XML文件编写
1.1 BookShop.xml
<?xml version="1.0" encoding="utf-8"?>
<BookShop xmlns="http://tempuri.org/BookShop.xsd">
<Book>西游记</Book>
<Boo>水浒传</Boo>
</BookShop>
2:代码文件编写
2.1 Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml.Schema;
using System.Xml;
namespace XmlReaderSettingsClass
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string strXmlPath = "http://www.cnblogs.com/BookShop.xml";
string strXmlXSDPath = "http://www.cnblogs.com/BookShop.xsd";
//把这个BookShop.xml文件打开成流
FileStream stream = new FileStream(strXmlPath, FileMode.Open);
//创建XmlValidatingReader类的对象
XmlValidatingReader xvr = new XmlValidatingReader(stream, XmlNodeType.Element, null);
//加载XML架构文档
xvr.Schemas.Add(null, strXmlXSDPath);
//说明验证的方式是根据XML架构来验证
xvr.ValidationType = ValidationType.Schema;
//预先定义一个事件
xvr.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);
//对文档进行验证
while (xvr.Read()) ;
//显示验证过程完成
MessageBox.Show("验证完成");
//关闭打开的文件
stream.Close();
}
private void ValidationHandler(object sender, ValidationEventArgs args)
{
//显示验证失败的消息
MessageBox.Show("验证失败:" + args.Message);
}
}
}
三:运行效果