使用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的解释
浙公网安备 33010602011771号