.NET Core 1.1.2中XML与XSD校验方法及相关报错咨询
我刚好对.NET Core 1.1.2的XML验证有了解,这个版本因为比较老旧,很多现代API还没加入,所以你遇到的报错都是因为API差异导致的,下面给你具体的解决方法:
.NET Core 1.1.2中验证XML的两种方式
1. 基础XML格式验证(检查语法合法性)
如果只是要验证XML的格式是否正确(比如标签是否闭合、语法是否合规),直接加载XML文档即可,格式错误会抛出XmlException:
using System.Xml; try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("path/to/your/xml-file.xml"); // 可以是文件路径、流或者文本读取器 Console.WriteLine("XML格式合法"); } catch (XmlException ex) { Console.WriteLine($"XML格式错误: {ex.Message}"); }
2. 基于XSD Schema的XML验证
你遇到的报错(找不到ValidationEventHandler、ValidationEventArgs,XmlReaderSettings没有Schemas属性),核心原因是.NET Core 1.1.2还没有引入这些现代API,需要用该版本支持的XmlDocument.Validate方法来实现,具体步骤如下:
第一步:添加必要的命名空间
确保代码顶部引用了以下命名空间(这两个是解决类型找不到问题的关键):
using System.Xml; using System.Xml.Schema;
第二步:完整验证代码示例
// 1. 加载XSD Schema到XmlSchemaSet XmlSchemaSet schemaSet = new XmlSchemaSet(); // 第一个参数是Schema的命名空间,null表示使用默认命名空间;第二个参数是XSD文件路径/流/读取器 schemaSet.Add(null, "path/to/your/schema-file.xsd"); // 2. 加载要验证的XML文档 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("path/to/your/xml-file.xml"); // 3. 执行验证并处理错误 bool isXmlValid = true; xmlDoc.Validate((sender, args) => { // 捕获验证过程中的所有错误 Console.WriteLine($"验证错误: {args.Message}"); isXmlValid = false; }, schemaSet); // 输出验证结果 if (isXmlValid) { Console.WriteLine("XML完全符合XSD Schema要求"); } else { Console.WriteLine("XML不符合XSD Schema要求"); }
关键说明
.NET Core 1.1.2中XmlReaderSettings.Schemas属性尚未实现,因此不能用XmlReader的方式关联Schema,必须通过XmlDocument.Validate方法传入XmlSchemaSetValidationEventHandler委托和ValidationEventArgs类都属于System.Xml.Schema命名空间,必须添加该命名空间引用才能使用- 验证过程中,默认会继续检查所有错误,不会因为单个错误终止,你可以在事件处理方法里根据需求决定是否终止验证
内容的提问来源于stack exchange,提问作者LP13
相关产品推荐
相关产品推荐

