(我是Schema验证的新手)
关于以下方法,
System.Xml.Schema.Extensions.Validate(
ByVal source As System.Xml.Linq.XDocument,
ByVal schemas As System.Xml.Schema.XmlSchemaSet,
ByVal validationEventHandler As System.Xml.Schema.ValidationEventHandler,
ByVal addSchemaInfo As Boolean)
我在IHttpHandler中使用它如下 -
Try
Dim xsd As XmlReader = XmlReader.Create(context.Server.MapPath("~/App_Data/MySchema.xsd"))
Dim schemas As New XmlSchemaSet() : schemas.Add("myNameSpace", xsd) : xsd.Close()
myXDoxumentOdj.Validate(schemas, Function(s As Object, e As ValidationEventArgs) SchemaError(s, e, context), True)
Catch ex1 As Threading.ThreadAbortException
'manage schema error'
Return
Catch ex As Exception
'manage other errors'
End Try
处理程序 -
Function SchemaError(ByVal s As Object, ByVal e As ValidationEventArgs, ByVal c As HttpContext) As Object
If c Is Nothing Then c = HttpContext.Current
If c IsNot Nothing Then
HttpContext.Current.Response.Write(e.Message)
HttpContext.Current.Response.End()
End If
Return New Object()
End Function
目前这对我来说很好,但看起来很弱。当我提供错误的XML时,我确实遇到了错误。但我想以更优雅的方式实现它。看起来它会破坏大型XML等。
有没有办法在没有处理程序的情况下进行验证,以便我一次性验证文档,然后处理错误?
对我而言,它看起来像Async,因此对Validate()的调用将会通过,而某些非确定性的时间将会在结果/错误中调用处理程序。是吗?
感谢和抱歉任何愚蠢的错误:)。
答案 0 :(得分:1)
我一直在使用上面的代码已经有一段时间了,我对它是Async不正确。在验证整个文档之前,它不会移动到下一个语句。