使用XSD验证xml文档

XSD:XML结构定义;

可以检验得到的xml文档的结构是否符合规范。

//1

xsd可以由VS自动生成具体的操作是:在vs项目中添加规范的xml文档,使用创建架构功能即可得到xsd文件

xsd文件

编码实现xml文档和xsd文档都应该放在程序运行的当前目录中;

具体的代码:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


using System.Xml;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void Form1_Load(object sender, EventArgs e)
{


}
/// <summary>
/// 使用XSD验证XML文档
/// </summary>
/// <returns></returns>
StringBuilder sb = new StringBuilder();//
public bool checkXmlDoc()
{
bool isOk= true;
//1
XmlDocument xmlDoc = new XmlDocument();
MemoryStream ms = new MemoryStream();
try
{
string xmlPath = AppDomain.CurrentDomain.BaseDirectory + "student.xml";
xmlDoc.Load(xmlPath);//若是字符串形式的xml可以直接load("xmlstring");
XmlElement xmlEle = xmlDoc.DocumentElement;
xmlEle.SetAttribute("xmlns", "http://www.w3.org/2001/XMLSchema");
xmlDoc.Save(ms);//将xml文档类型转换为流类型存储
ms.Position = 0;//读取内存流 的指针初始化为0
}
catch (Exception ex)
{
sb.Append(ex);
}
//2
XmlReaderSettings setting = new XmlReaderSettings();
setting.ValidationType = ValidationType.Schema;//验证的类型Schema
string xsdPath = AppDomain.CurrentDomain.BaseDirectory + "student.xsd";
setting.Schemas.Add("http://www.w3.org/2001/XMLSchema", xsdPath);
setting.ValidationEventHandler+=new System.Xml.Schema.ValidationEventHandler(setting_ValidationEventHandler);
//3
try
{
using (XmlReader reader = XmlReader.Create(ms, setting))
{
reader.MoveToContent();
while (reader.Read())
{ }
}
}
catch (Exception ex)
{
sb.Append(ex);
}
if (sb.Length == 0)
{
isOk = true;
}
else
{
isOk = false;
}
return isOk;
}
void setting_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs s)
{
sb.Append(s);
}
}
}


附:

(1)对于给xml文档的根节点添加 xmlns属性并赋予http://www.w3.org/2001/XMLSchema;个人理解:xsd和xml建立联系的纽带,然后通过xmlreader.create建立的xmlreader实例对xml文档读取验证;若不符合规范就会引发异常;

(2)具体的xmlreadersetting,xmlreader可以参照msdn的解释

posted @ 2014-02-12 21:51  華曉米  阅读(888)  评论(0)    收藏  举报