zoukankan      html  css  js  c++  java
  • 用xsd验证xml

    using System;
    using System.Text;
    using System.Xml;
    
    namespace WebApplication1
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
            StringBuilder sb = null;
            protected void ValidateFile(object sender, EventArgs e)
            {
                string dataFile = Server.MapPath("Order.xml");
                string schemaFile = Server.MapPath("OrderSchema.xsd");
                string namespaceUrl = "http://tempuri.org/OrderSchema.xsd";
    
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationType = ValidationType.Schema;
                settings.Schemas.Add(namespaceUrl, schemaFile);
                settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);
    
                string errorMessage="这不是一个合乎规范的数据文件";
                sb = new StringBuilder();
    
                XmlReader reader = XmlReader.Create(dataFile, settings);
                try
                {
                    reader.MoveToContent();
                    while (reader.Read())
                    {
                        if (reader.NodeType == XmlNodeType.Document && reader.NamespaceURI != namespaceUrl)
                        {
                            Response.Write(errorMessage);
                            break;
                        }
                    }
                }
                catch (XmlException ex)
                {
                    sb.AppendFormat("{0}<br />", ex.Message);
                }
                finally
                {
                    reader.Close();
                }
    
                if (sb.Length == 0)
                    Response.Write("该文档是合法的");
                else
                    Response.Write(sb.ToString());
            }
    
            void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)
            {
                sb.AppendFormat("{0}<br />", e.Message);
            }
        }
    }

    如果传过来的是XMl的string类型

             StringBuilder sb = null;
            public bool CheckXML(string xml)
            {
                if (xml == null || xml == "")
                {
                    return true;
                }
                byte[] array = Encoding.ASCII.GetBytes(xml);
                MemoryStream stream = new MemoryStream(array);
    
                string schemaFile = System.Web.HttpContext.Current.Server.MapPath("K2HandoffTemplate.xsd");
    
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationType = ValidationType.Schema;
                settings.Schemas.Add(null, schemaFile);
                settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);
                sb = new StringBuilder();
    
                XmlReader reader = XmlReader.Create(stream, settings);
                try
                {
                    reader.MoveToContent();
                    while (reader.Read())
                    {
                        if (reader.NodeType == XmlNodeType.Document)
                        {
                            return false;
                        }
                    }
                }
                catch (XmlException ex)
                {
                    return false;
                }
                finally
                {
                    reader.Close();
                }
    
                if (sb.Length == 0)
                    return true;
                else
                    return false;
            }
    
            void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)
            {
                sb.AppendFormat("{0}<br />", e.Message);
            }
  • 相关阅读:
    常用连链接命令行存储小工具
    switch case 跳转表
    抖音越狱版本App下载
    AutoLayout + UILabel布局
    ReplayKit2 有线投屏项目-反向Socket实现
    ReplayKit2 有线投屏项目总结
    直播相关-搭建直播流服务器nodejs
    难过!失眠!
    CAShapeLayer
    WebService相关概念介绍
  • 原文地址:https://www.cnblogs.com/shinima/p/4135246.html
Copyright © 2011-2022 走看看