C# 利用Xsd验证xml
最近做项目时,用到了xml的序列化与反序列化, 发现最好用xsd来验证xml, 因为反序列化xml不校验xsd。
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xmlData));
ms.Position = 0; string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GetNoNamespaceSchemaLocation(xmlData));
                    XmlReaderSettings settings = new XmlReaderSettings();
                    settings.ValidationType = ValidationType.Schema;
                    settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
                    settings.IgnoreComments = true;
                    settings.IgnoreWhitespace = true;
                    settings.Schemas.Add(null, path);
                    using (XmlReader xmlReader = XmlReader.Create(ms, settings))
                    {
                        XmlDocument xmlDocument = new XmlDocument();
                        xmlDocument.Load(xmlReader);
                        xmlDocument.Validate(ValidationCallBack);
                    }
        public static string GetNoNamespaceSchemaLocation(string xml)
        {
            string result = "";
            MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
            using (XmlReader xmlReader = XmlReader.Create(memoryStream))
            {
                while (xmlReader.Read())
                {
                    if (xmlReader.NodeType == XmlNodeType.Element)
                    {
                        result = xmlReader.GetAttribute("noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
                        break;
                    }
                }
            }
            memoryStream.Close();
            return result;
        }
        //Display any warnings or errors.
        private static void ValidationCallBack(object sender, ValidationEventArgs args)
        {
            System.Diagnostics.Debug.WriteLine(args.Message);
            throw args.Exception;
        }
C# 利用Xsd验证xml的更多相关文章
- C# xsd 验证 XML数据有效性 问题
		
使用XSD进行批量数据导入时生成的XML数据有效性这样的功能已经不是第一次做了,之前做的时候都没有碰到什么问题,这些天在开发中遇到了一个很头痛的问题就是无论XSD文件规则怎么写,验证都是通过的. 下面 ...
 - 使用架构(XSD)验证XML文件
		
假使说XML是一个数据库,那么XSD就是这个数据库的结构.由此可见,XSD是如此重要,如果没有它,我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢?那是不可能完成的任务,如果你将XML数据 ...
 - 用xsd验证xml
		
using System; using System.Text; using System.Xml; namespace WebApplication1 { public partial class ...
 - XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
		
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...
 - C# 使用xsd文件验证XML 格式是否正确
		
C# 使用xsd文件验证XML 格式是否正确 核心示例代码: //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xm ...
 - 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 ...
 - Delphi 7验证XML合法性(利用DTD、XSD)
		
拥有正确语法的XML被称为“形式良好”的XML.通过DTD验证的XML是“合法”的XML.DTD(文档类型定义)的作用是定义XML 文档的合法构建模块.它使用一系列的合法元素来定义文档结构.XML S ...
 - XML的应用 ---- 从一个范例看xml数据、xsd验证、xslt样式
		
从一个范例看XML的应用 引言 如果你已经看了Asp.Net Ajax的两种基本开发模式 这篇文章,你可能很快会发现这样一个问题:在那篇文章的方式2中,客户端仅仅是发送了页面上一个文本框的内容到服务端 ...
 - 通过xsd schema结构来验证xml是否合法
		
import sys import StringIO import lxml from lxml import etree from StringIO import StringIO # Constr ...
 
随机推荐
- iOS11 push控制器tabbar上移问题
			
解决方法 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { // 如果有大 ...
 - C#基础知识之三
			
C#基础知识之三 1. 程序集间的继承:基类必须被声明为public.必须在project中包含对该基类的程序集引用. 2. 对其它程序集引用和添加对using指令的差别:前者是告诉编译器所需的类 ...
 - sql 2008数据事务日志已满处理方法
			
突然发现sql 2008出现错误:数据库 'mybase_db' 的事务日志已满.若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc ...
 - Android LockScreen (锁屏弹窗)
			
在要弹窗的Activity需要进行以下设置,才可以在锁屏状态下弹窗 @Override protected void onCreate(Bundle savedInstanceState) { fin ...
 - node-sass 安装失败的解决措施[转]
			
转自:http://blog.csdn.net/nzb329/article/details/51935236 在编译一个项目的时候,一直报错 后来发现是因为node-sass没有装成功, 最终的解决 ...
 - python多版本管理
			
1.查看系统中的安装了那些python版本 2.查看系统中的alternatives命令是否安装 3.使用alternatives --install 接管python -install 选项使用了多 ...
 - Blobstore Java API overview
			
Blobstore API允许你的应用程序使用(serve)叫做Blobs的数据对象.这种数据对象比Datastore服务所允许的对象的尺寸大得多.Blobs能有效地为大文件比如视频.图片提供服务,允 ...
 - javascript操作常见的html标签
			
几乎HTML所有标记都可以说是HTML的控件,如select, input, div, table等.html标签便捷的操作,深受大家的喜欢.现在的大部分网站都是ajax+json来进行数据传送.所以 ...
 - [转]eclipse中的常用快捷键
			
1.选中你要加注释的区域,用ctrl+shift+C 会加上//注释2.先把你要注释的东西选中,用shit+ctrl+/ 会加上注释3.要修改在eclispe中的命令的快捷键方式我们只需进入windo ...
 - Python 3 并发编程多进程之队列(推荐使用)
			
Python 3 并发编程多进程之队列(推荐使用) 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 可以往 ...