zoukankan      html  css  js  c++  java
  • 检验多个xsd的xml是否合法

    Java - 使用 XSD 校验 XML

    https://www.cnblogs.com/huey/p/4600817.html

    这种方法不支持多个xsd文件,会报错

    可以使用XMLBeans Tools来验证,3.1的版本用起来有问题,后来用2.6版本的就OK了

    利用xmlbeans工具对xml格式进行验证(需要xsd文件)

    https://blog.csdn.net/CronousGT/article/details/64137277

    https://download.csdn.net/download/cronousgt/9787716#comment

    http://xmlbeans.apache.org/docs/2.0.0/guide/tools.html

    为了解决这个问题我们需要使用LSResourceResolver, SchemaFactory在解析shcema的时候可以使用LSResourceResolver加载外部资源。

    XML validation for multiple schemas 验证使用多个XSD schema的XML文件

    https://blog.csdn.net/hld_hepeng/article/details/6318663

    Validating XML against XSD schemas in C#

    https://samjenkins.com/validating-xml-against-xsd/

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Xml;
    using System.Xml.Schema;
    
    namespace KetoLibrary.Xml
    {
        public class XsdValidator
        {
            public List<XmlSchema> Schemas { get; set; }
            public List<String> Errors { get; set; }
            public List<String> Warnings { get; set; }
    
            public XsdValidator()
            {
                Schemas = new List<XmlSchema>();
            }
    
            /// <summary>
            /// Add a schema to be used during the validation of the XML document
            /// </summary>
            /// <param name="schemaFileLocation">The file path for the XSD schema file to be added for validation</param>
            /// <returns>True if the schema file was successfully loaded, else false (if false, view Errors/Warnings for reason why)</returns>
            public bool AddSchema(string schemaFileLocation)
            {
                if (String.IsNullOrEmpty(schemaFileLocation)) return false;
                if (!File.Exists(schemaFileLocation)) return false;
    
                // Reset the Error/Warning collections
                Errors = new List<string>();
                Warnings = new List<string>();
    
                XmlSchema schema;
    
                using (var fs = File.OpenRead(schemaFileLocation))
                {
                    schema = XmlSchema.Read(fs, ValidationEventHandler);
                }
    
                var isValid = !Errors.Any() && !Warnings.Any();
    
                if (isValid)
                {
                    Schemas.Add(schema);
                }
    
                return isValid;
            }
    
            /// <summary>
            /// Perform the XSD validation against the specified XML document
            /// </summary>
            /// <param name="xmlLocation">The full file path of the file to be validated</param>
            /// <returns>True if the XML file conforms to the schemas, else false</returns>
            public bool IsValid(string xmlLocation)
            {
                if (!File.Exists(xmlLocation))
                {
                    throw new FileNotFoundException("The specified XML file does not exist", xmlLocation);
                }
    
                using (var xmlStream = File.OpenRead(xmlLocation))
                {
                    return IsValid(xmlStream);
                }
            }
    
            /// <summary>
            /// Perform the XSD validation against the supplied XML stream
            /// </summary>
            /// <param name="xmlStream">The XML stream to be validated</param>
            /// <returns>True is the XML stream conforms to the schemas, else false</returns>
            private bool IsValid(Stream xmlStream)
            {
                // Reset the Error/Warning collections
                Errors = new List<string>();
                Warnings = new List<string>();
    
                var settings = new XmlReaderSettings
                {
                    ValidationType = ValidationType.Schema
                };
                settings.ValidationEventHandler += ValidationEventHandler;
    
                foreach (var xmlSchema in Schemas)
                {
                    settings.Schemas.Add(xmlSchema);
                }
    
                var xmlFile = XmlReader.Create(xmlStream, settings);
    
                try
                {
                    while (xmlFile.Read()) { }
                }
                catch (XmlException xex)
                {
                    Errors.Add(xex.Message);
                }
    
                return !Errors.Any() && !Warnings.Any();
            }
    
            private void ValidationEventHandler(object sender, ValidationEventArgs e)
            {
                switch (e.Severity)
                {
                    case XmlSeverityType.Error:
                        Errors.Add(e.Message);
                        break;
                    case XmlSeverityType.Warning:
                        Warnings.Add(e.Message);
                        break;
                }
            }
        }
    }
    

      

    public void MultipleSchemas()
    {
        var validator = new XsdValidator();
        validator.AddSchema(@"SchemaDoc1.xsd");
        validator.AddSchema(@"SchemaDoc2.xsd");
        var isValid = validator.IsValid(@"ValidXmlDoc1.xml");
    }
    

      

  • 相关阅读:
    分布式架构高可用架构篇_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试
    @interface [SpringMVC+redis]自定义aop注解实现控制器访问次数限制
    ActiveMQ安装与持久化消息
    activemq 5.13.2 jdbc 数据库持久化 异常 找不到驱动程序
    java通过Comparable接口实现字符串比较大小排序的简单实例
    微信小程序--火车票查询
    【调试】如何使用javascript的debugger命令进行调试(重要)
    【调试】js调试console.log使用总结图解(重要)
    ajax提交表单
    一个项目的404错误处理页面
  • 原文地址:https://www.cnblogs.com/sui84/p/11604112.html
Copyright © 2011-2022 走看看