Jump to content
Zed_Blade

Validação de XML ou XDocument

Recommended Posts

Zed_Blade

Bom dia,

Estou aqu icom uma pequena dúvida referente a um pedaço de código que tenho para fazer a validação de um XML, a ser trabalhado como um Xdocument.

Basicamente, existe uma função onde tenho o seguinte pedaço de código:

Dim schemas As XmlSchemaSet = New XmlSchemaSet()
 Dim stream As Stream = New FileStream(xsd, FileMode.Open)
 Dim schema As XmlSchema = Nothing
 If stream IsNot Nothing Then
	 schema = XmlSchema.Read(stream, Nothing)
	 schemas.Add(schema)
 End If
 Dim doc As XDocument = New XDocument(xml)
 doc.Validate(schemas, AddressOf ValidationCallBack)

If valido Then
	 getData(doc)
 Else
	 MessageBox.Show("Deu m**** rapaiz!")
 End If
 stream.Dispose()

A propriedade válido está definida como True, sendo uma propriedade da classe.

Basicamente, tenho depois o ValidationCallback que encontrei na net (ainda que isto seja bastante simples) adaptado para trabalhar com o meu código:

Private Sub ValidationCallBack(ByVal sender As Object, ByVal args As ValidationEventArgs)
 If args.Severity = XmlSeverityType.Warning Then
	 valido = False
	 Console.WriteLine("Warning: " & args.Message)
 ElseIf args.Severity = XmlSeverityType.Error Then
	 valido = False
	 Console.WriteLine("Error: " & args.Message)
 End If
End Sub

A questão aqui é a seguinte, o que eu queria fazer era ter a variável "valido" definida a False no inicio da classe e apenas se passasse a validação então seria definida a true, bastante modificar o código do validationCallback para o seguinte:

Private Sub ValidationCallBack(ByVal sender As Object, ByVal args As ValidationEventArgs)
 If args.Severity = XmlSeverityType.Warning Then
	 'valido = False
	 Console.WriteLine("Warning: " & args.Message)
 ElseIf args.Severity = XmlSeverityType.Error Then
	 'valido = False
	 Console.WriteLine("Error: " & args.Message)
 Else
	 valido = True
 End If
End Sub

No entanto, eu notei que isso nunca acontece, ou seja, nem tenho notado sequer que ao fazer debug consiga entrar dentro desta função, apesar de não obter erros.

O que é que estou a fazer mal? Estes eventos de validação apenas "disparam" quando existe algum erro e é por isso que nunca me define o valido=true mesmo que não tenha erros?

Cumps.

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
Guilherme Santos

Você pode definir para True antes de tudo

Private Sub ValidationCallBack(ByVal sender As Object, ByVal args As ValidationEventArgs)
           valido = True
If args.Severity = XmlSeverityType.Warning Then
                   valido = False
                   Console.WriteLine("Warning: " & args.Message)
           ElseIf args.Severity = XmlSeverityType.Error Then
                   valido = False
                   Console.WriteLine("Error: " & args.Message)
           End If
   End Sub

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
nelsonr

Isso não resolve, visto essa função só é chamada se houver avisos ou erros.

Share this post


Link to post
Share on other sites
GonçaloRoque

Como dito em cima, esse evento só vai ser despoletado quanto tiveres erros.

Logo se nunca for despoletado não tens erros ;)

Não percebo o problema...

Edited by GonçaloRoque

Share this post


Link to post
Share on other sites
Zed_Blade

Como dito em cima, esse evento só vai ser despoletado quanto tiveres erros.

Logo se nunca for despoletado não tens erros ;)

Não percebo o problema...

Não existe problema e a dúvida era mesmo essa, ou seja, se era chamada apenas quando desse erro. De qualquer das formas,agradeço a resposta (pode ser útil para alguém um dia) mas já tinha chegado à resposta que queria, apesar de nunca mais cá ter vindo.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.