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 ListSchemas { get; set; } public List Errors { get; set; } public List Warnings { get; set; } public XsdValidator() { Schemas = new List (); } /// /// Add a schema to be used during the validation of the XML document /// /// The file path for the XSD schema file to be added for validation ///True if the schema file was successfully loaded, else false (if false, view Errors/Warnings for reason why) 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(); Warnings = new List (); 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; } /// /// Perform the XSD validation against the specified XML document /// /// The full file path of the file to be validated ///True if the XML file conforms to the schemas, else false 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); } } ////// Perform the XSD validation against the supplied XML stream /// /// The XML stream to be validated ///True is the XML stream conforms to the schemas, else false private bool IsValid(Stream xmlStream) { // Reset the Error/Warning collections Errors = new List(); Warnings = new List (); 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"); }