同步 XML 架构验证? .NET 3.5

2024-01-22

我知道我可以使用如下回调方法根据模式验证 xml,但是有没有一种方法可以同步执行而不是事件驱动?

我想到的一种方法是设置一个类成员布尔标志 IsValidated=false 然后
调用 xml.Validate(ValidationEventHandler)。事件处理程序将在完成后设置 IsValidated=true。同时,进行循环检查,直到标志设置为 true,然后继续。

这是针对 .Net 3.5 的。

    public bool ValidateSchema(string xmlPath, string xsdPath)
    {
        XmlDocument xml = new XmlDocument();
        xml.Load(xmlPath);

        xml.Schemas.Add(null, xsdPath);

        xml.Validate(ValidationEventHandler); 
    }

好的,我已经做了一个测试,看来 xml.validate 实际上会等到回调完成后再执行新代码。

在以下示例中,MessageBox.Show("After Validate");总是在执行 myValidationEventHandler 之后发生。

我还通过代码来验证这一点。

所以我想这使得我的问题不再是问题。

// load etc.
...

xmlValidate(myValidationEventHandler);

MessageBox.Show("After Validate");


    private void myValidationEventHandler(object sender, ValidationEventArgs e)
    {
        for (double i = 0; i < 100000; i++)
        {
            textBox1.Text = i.ToString();
            Application.DoEvents();
        }

    // do stuff with e
    }

您可以为 ValidationEventHandler 指定 null 以使 Validate 方法抛出异常。

    public bool ValidateSchema(string xmlPath, string xsdPath)
    {
        XmlDocument xml = new XmlDocument();
        xml.Load(xmlPath);

        xml.Schemas.Add(null, xsdPath);

        try
        {
            xml.Validate(null);
        }
        catch (XmlSchemaValidationException)
        {
            return false;
        }
        return true;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同步 XML 架构验证? .NET 3.5 的相关文章

随机推荐