M3N*_*TA7 6 c# xml xsd xsd-validation
我知道我可以使用如下所示的回调方法对模式验证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);
}
Run Code Online (Sandbox Code Playgroud)
好的,我已经完成了测试,看起来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
}
Run Code Online (Sandbox Code Playgroud)
您可以为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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3669 次 |
| 最近记录: |