(я новичок в проверке схемы)
Что касается следующего метода,
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 () пройдет, и через некоторое недетерминированное время обработчик будет вызван с результатом / ошибками. Это правильно?
Спасибо и извините за любые глупые ошибки:).