如何根据本地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

如何根据本地XSD模式验证本地XML文档- ValidationEventHandler的问题

这个例子实际上有一个叫做ValidationEventHandler的方法。你不。更改eventHandler分配以使用实际的事件处理程序方法:

ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationCallback);

也可以使用隐式转换:

ValidationEventHandler eventHandler = ValidationCallback;

或者完全省略局部变量:

document.Validate(ValidationCallback);