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 ...
随机推荐
- vuex在页面中以对象展开运算符形式引入报错解决
当页面中以mapGetters等对象扩展运算符写的时候,会报错 unexpected token 解决如下: babel还要加插件才能解释这个写法 npm install --save-dev bab ...
- 前端如何获取http状态码400的返回值
axios.get("/check_mobile_and_sent_code",{withCredentials:true,params:{mobile:formInline.mo ...
- Unity3D编辑器之重写Hierarchy的右键菜单
using UnityEngine; using UnityEditor; using System.Collections; public class MyHierarchyMenu { [Menu ...
- BarTender表单的人性化设计—分组框
BarTender 2016已经支持用户输入信息.从相同位置查询数据库和筛选数据记录,那就是数据输入表单了.这个功能相信迎合了很多用户的需求,主要作用体现在打印时数据输入. 对于表单的设计,不同的客户 ...
- Java如何取得当前程序部署的服务器的IP
1.问题:之前使用InetAddress.getLocalHost().getHostAddress()时,在开发机测试可以得到192.168.0.18这样的IP.但部署到linux服务器以后, 这个 ...
- linux环境中,查看域名的DNS信息?
需求说明: 今天在linux主机上,要查询一个域名是在哪个DNS上进行解析的,这个域名下面还有哪些的地址 操作过程: 1.linux环境中通过nslookup命令来进行查看 [deployer@CBS ...
- Linux中/etc/resolv.conf文件简析
https://blog.csdn.net/lcr_happy/article/details/54867510
- [OpenCV] Image Processing - Grayscale Transform & Histogram
颜色直方图 首先,先介绍一些Hist的基本使用. Ref:[OpenCV]数字图像灰度直方图 官方文档:https://docs.opencv.org/trunk/d8/dbc/tutorial_hi ...
- [OpenCV] Samples 06: logistic regression
logistic regression,这个算法只能解决简单的线性二分类,在众多的机器学习分类算法中并不出众,但它能被改进为多分类,并换了另外一个名字softmax, 这可是深度学习中响当当的分类算法 ...
- Java -- 异常的捕获及处理 -- 自定义异常类
7.4 自定义异常类 定义异常类只需要继承Exception类即可. 例:自定义异常类 Class : MyException package limeThrowable._7_4; public c ...