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");
    }
    

      

  • 相关阅读:
    设计模式概述
    Android之.9.png图片的制作与使用
    2015-4-3~2015-5-28 第四届全国大学生软件设计大赛《解密陌生人》项目总结
    排序算法之快速排序
    AsyncTask那些事(更新中...)
    经典Android面试题
    import第三方库的头文件找不到的错误
    点击某个按钮在tableView某个位置动态插入一行cell
    NSUserDefaults:熟悉与陌生(转)
    更改UIsearchbar 的背景和cancel按钮(转)
  • 原文地址:https://www.cnblogs.com/sui84/p/11604112.html
Copyright © 2011-2022 走看看