C# 验证XML
一、验证XML文档
若要验证 XML 文档,需要构造一个 XmlReaderSettings 对象,其中包含用于验证 XML 文档的 XML 架构定义语言 (XSD) 架构。Schema是用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML文件逻辑结构的正确性。
二、验证的类
public class XMLValidate
{
/// <summary>
/// 辅助验证变量
/// </summary>
private static bool isValidateXML = true;
/// <summary>
/// 验证提示
/// </summary>
private static string message;
/// <summary>
/// 验证上传的XML文件是否是格式正确的
/// </summary>
/// <param name="filename">XML文件路径</param>
/// <param name="schema">XSD文件路径</param>
/// <returns></returns>
public static string ValidateXml(string filename, string schema)
{
XmlSchemaSet xsSet = new XmlSchemaSet();
try
{
xsSet.Add(null, schema);
}
catch (Exception ex)
{
return ex.Message;
}
// 定义公文模式的使用方式
XmlReaderSettings xrSetting = new XmlReaderSettings();
xrSetting.ValidationType = ValidationType.Schema;
// 关联验证读取器与架构集合
xrSetting.Schemas = xsSet;
// 添加发生错误时的事件处理程序
xrSetting.ValidationEventHandler += new ValidationEventHandler(MyValidationEventHandler);
// 使用最新的方式来构建可进行校验的读取器并构造验证读取器
XmlReader xr = XmlReader.Create(filename, xrSetting);
// 循环检测所有的文档节点
try
{
while (xr.Read()) {}
}
catch (Exception ex)
{
return ex.Message;
}
xr.Close();
return message;
}
/// <summary>
/// 验证处理
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private static void MyValidationEventHandler(object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Warning)
{
message = args.Message;
}
else
{
message=args.Message;
}
isValidateXML = false;
}
}
三、把需要验证的XML文件转换成XSD文件
/// <summary>
/// 确定按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSubmit_Click(object sender, EventArgs e)
{
string path = this.txtPath.Text;
if (string.IsNullOrEmpty(path))
{
MessageBox.Show("请选择文件");
return;
}
FileStream stream = new FileStream(path, FileMode.Open);
EvidenceFilesModel dep = (EvidenceFilesModel)XMLParser.Deserialize(typeof(EvidenceFilesModel), stream);
stream.Close(); string xml = XMLParser.Serializer(typeof(EvidenceFilesModel), dep); string flag = XMLValidate.ValidateXml(path, @"C:\Users\PEPE\Desktop\big.xsd");
this.lblMsg.Text = flag;
}
XML 转换成XSD工具下载,使用方法直接把XML文档拖到xsd.exe 上即可
读取字节点 linq to xml
/// <summary>
/// 证据完整性信息
/// </summary>
public IntegrityModel Validate_Integrity(XDocument xDocument)
{
//XmlReader nodeReader = XmlReader.Create(new StringReader(xml));
//XDocument xElement = XDocument.Load(nodeReader);
IEnumerable<XElement> query = from w in xDocument.Descendants("Integrity") select w;
return (IntegrityModel)IntegrityValidate.ValidateIntegrity_Integrity(query);
}
C# 验证XML的更多相关文章
- XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...
- 使用架构(XSD)验证XML文件
假使说XML是一个数据库,那么XSD就是这个数据库的结构.由此可见,XSD是如此重要,如果没有它,我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢?那是不可能完成的任务,如果你将XML数据 ...
- C# 使用xsd文件验证XML 格式是否正确
C# 使用xsd文件验证XML 格式是否正确 核心示例代码: //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xm ...
- DTD验证XML文档
DTD验证XML文档 1.DTD简介:DTD是Document Type Definition的缩写,即文档定义 1.1:DTD的内容包含: ...
- C# xsd 验证 XML数据有效性 问题
使用XSD进行批量数据导入时生成的XML数据有效性这样的功能已经不是第一次做了,之前做的时候都没有碰到什么问题,这些天在开发中遇到了一个很头痛的问题就是无论XSD文件规则怎么写,验证都是通过的. 下面 ...
- C# 利用Xsd验证xml
最近做项目时,用到了xml的序列化与反序列化, 发现最好用xsd来验证xml, 因为反序列化xml不校验xsd. 方法:xmlData变量为xml字符串 MemoryStream ms = new M ...
- Delphi 7验证XML合法性(利用DTD、XSD)
拥有正确语法的XML被称为“形式良好”的XML.通过DTD验证的XML是“合法”的XML.DTD(文档类型定义)的作用是定义XML 文档的合法构建模块.它使用一系列的合法元素来定义文档结构.XML S ...
- 28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
转自https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html XML Schema 语言也称作 XML Schema 定义(XML S ...
- C#中用schema验证xml的合法性
class ValidateXML { public string ErrString = string.Empty; public void ValidationEventCallBack(Obje ...
随机推荐
- Node.js静态文件服务器实战[转]
p.s. 在下面这篇文章的指导下,做了一个静态文件服务器,见:https://github.com/walkerwzy/node_static_server ==== 这是一篇阐述得比较详细的文章,从 ...
- koa项目用mongoose与mongodb交互,始终报错FormModel is not defined
koa项目用mongoose与mongodb交互,始终报错FormModel is not defined,就是自己定义的model实例始终不能找到,但是明明定义了,这时候就要看大小写了,当创建一个m ...
- c++运算符重载---20
原创博文,转载请标明出处--周学伟 http://www.cnblogs.com/zxouxuewei/ c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程 ...
- Android Studio 视图解析
AS一共同拥有三种视图.我们来分别分析每一种视图的作用. 一.Project视图.(白色字体的文件夹/文件可不关注) 图片中的链接 Gralde介绍:http://stormzhang.com/dev ...
- ZTree id值太大,ZTree没有生成树,ZTree的id值过大
ZTree id值太大,ZTree没有生成树,ZTree的id值过大 >>>>>>>>>>>>>>>> ...
- Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie
Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...
- 【ArcGIS】ArcGIS Android SDK
1.错误提示 11-06 18:12:17.553: A/libc(11929): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 1 ...
- TTL值
我们在解析域名时经常出现 TTL 这个字段,里面默认写的是 10 分钟. 另外,有时候我们 ping 某域名或 IP 的时候,会出现 TTL= XXX. 一.什么是域名的 TTL 值? TTL(Tim ...
- Linux-selinux
查看SELinux状态: 1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: ...
- Python爬虫学习笔记-2.Requests库
Requests是Python的一个优雅而简单的HTTP库,它比Pyhton内置的urllib库,更加强大. 0X01 基本使用 安装 Requests,只要在你的终端中运行这个简单命令即可: pip ...