如何根据本地 XSD 模式验证本地 XML 文档 - ValidationEventHandler 问题
How to validate a local XML document against a local XSD schema - Issues with ValidationEventHandler
我正在尝试根据名为 myConfig.config.xsd 的本地存储的 XSD 模式简单地验证由我的程序 (output.xml) 创建的 XML 文档。首先,这不会 运行 因为我尝试创建的验证事件处理程序 returns 出现错误“'System.Xml.Schema.ValidationEventHandler' 是 'type' 但像 'variable' 一样使用”这是有道理的,但我在下面参考的教程正是这样做的。此外,我引用的 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);
我正在尝试根据名为 myConfig.config.xsd 的本地存储的 XSD 模式简单地验证由我的程序 (output.xml) 创建的 XML 文档。首先,这不会 运行 因为我尝试创建的验证事件处理程序 returns 出现错误“'System.Xml.Schema.ValidationEventHandler' 是 'type' 但像 'variable' 一样使用”这是有道理的,但我在下面参考的教程正是这样做的。此外,我引用的 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);