如何根据本地XSD模式验证本地XML文档- ValidationEventHandler的问题
本文关键字:文档 ValidationEventHandler 问题 XML 模式 何根 XSD 验证 | 更新日期: 2023-09-27 18:07:18
我试图根据本地存储的名为myConfig.config.xsd的XSD模式简单地验证由我的程序(output.xml)创建的XML文档。首先,它不会运行,因为我尝试创建的验证事件处理程序返回错误"System.Xml.Schema"。ValidationEventHandler'是一个'类型',但像'变量'一样使用,这是有意义的,但我下面引用的教程正是这样做的。此外,我引用的xsd文件是本地的,而其他教程似乎引用了具有在线名称空间的xsd。对于我的,我只是把"schema"作为命名空间;这样可以吗?
方法如下:
public void Validate()
{
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("schema", "myConfig.config.xsd"); //!!Here is where I just put "schema" as the namespace
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
XmlReader reader = XmlReader.Create("output.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
//^Here is the problem line that won't let me build this program
document.Validate(eventHandler);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private static void ValidationCallback(object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Warning)
Console.WriteLine("'tWarning: Matching schema not found. No validation occurred." + args.Message);
else
Console.WriteLine("'tValidation error: " + args.Message);
}
我正在尝试使用这个指南来帮助我做到这一点:https://msdn.microsoft.com/en-us/library/ms162371(v=vs.110).aspx
这个例子实际上有一个叫做ValidationEventHandler
的方法。你不。更改eventHandler
分配以使用实际的事件处理程序方法:
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationCallback);
也可以使用隐式转换:
ValidationEventHandler eventHandler = ValidationCallback;
或者完全省略局部变量:
document.Validate(ValidationCallback);