检验多个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/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | 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 ; } } } } |
1 2 3 4 5 6 7 | public void MultipleSchemas() { var validator = new XsdValidator(); validator.AddSchema( @"SchemaDoc1.xsd" ); validator.AddSchema( @"SchemaDoc2.xsd" ); var isValid = validator.IsValid( @"ValidXmlDoc1.xml" ); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!