Проверка XDocument по схеме без ValidationEventHandler (для использования в обработчике HTTP) - PullRequest
3 голосов
/ 26 февраля 2010

(я новичок в проверке схемы)

Что касается следующего метода,

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

Спасибо и извините за любые глупые ошибки:).

1 Ответ

1 голос
/ 16 апреля 2010

Я работаю с приведенным выше кодом в течение некоторого времени, и я ошибался, считая его асинхронным Он не перемещается к следующему утверждению, пока весь документ не будет проверен.

...