求推荐Schematron验证XML的C#/.NET库及解决Schematron.NET无效问题
可用的C#/.NET Schematron验证类库
- Schematron.NET:轻量原生.NET库,支持基础Schematron规则验证,但文档较简略,需注意调用逻辑
- Saxon-HE .NET:开源XSLT/XQuery处理器,可将Schematron规则转换为XSLT样式表后验证XML,支持复杂Schematron特性(如抽象模式、变量等)
- XmlPrime:商业级XML处理库,内置Schematron验证支持,适配企业级场景
修复你的Schematron.NET验证失效问题
你的代码存在两个核心问题:
- 未正确获取验证结果:Schematron.NET的验证错误通常不会直接抛出异常,而是通过返回的结果集体现
- 调用流程错误:
Validate和ValidateSchematron的用法不符合库的设计逻辑
修正后的代码示例:
try { using (var xrXML = XmlReader.Create("xmlData.xml")) using (var xrSch = XmlReader.Create("schematron.sch")) { Validator validator = new Validator(); Schema schema = new Schema(); schema.Load(xrSch); validator.AddSchema(schema); // 执行验证并获取结果 ValidationResult result = validator.Validate(xrXML); // 检查验证结果 if (!result.IsValid) { foreach (var error in result.Errors) { Console.WriteLine($"验证错误: {error.Message}"); Console.WriteLine($"位置: 行{error.LineNumber}, 列{error.LinePosition}"); } } else { Console.WriteLine("XML验证通过"); } } } catch (Exception ex) { Console.WriteLine($"发生异常: {ex.Message}"); }
额外注意事项:
- 确保你的Schematron文件(schematron.sch)格式正确,无语法错误
- 若使用旧版本Schematron.NET,可能存在规则兼容性问题,建议尝试更新至最新版本
内容的提问来源于stack exchange,提问作者antann78
相关产品推荐
相关产品推荐

