VALIDA?ÃO DE XML COM SCHEMA

ANGELOATA 12/01/2017 14:55:30
#470654
Gostaria de saber se algum conseguiu fazer um validador dos erros da NFe com o schema semelhante ao da nota fiscal gratuito do governo.

Sem sim tem como passar dicas de como fazer?
KERPLUNK 12/01/2017 23:23:00
#470662
Pra mim, as mensagens de erro parecem bem claras...
PLUGSOFTSM 13/01/2017 08:50:36
#470672
Resposta escolhida

Public Lista as new list(of string)
public NomeArq as string = [Nome do arquivo XML]

Private Sub VerificaErros(ByVal sender As Object, ByVal e As ValidationEventArgs)
If Not e.Exception.Message.Contains([Ô]Signature[Ô]) Then
[ô] MsgBox(e.Exception.LineNumber.ToString & Chr(13) & e.Message.ToString)
Lista.Add([Ô]Erro na linha: [Ô] & e.Exception.LineNumber.ToString & [Ô], Coluna: [Ô] & e.Exception.LinePosition.ToString & [Ô], mensagem: [Ô] & e.Exception.Message + Chr(13))
End If
End Sub

Friend Function ValidaXML() As String
lista.clear
Try
If IO.File.Exists(NomeArq) = False Then Throw New Exception([Ô]Não foi localizado o arquivo XML a ser validado.[Ô] & ControlChars.NewLine & NomeArq)
Dim SchemaSet As XmlSchemaSet = New XmlSchemaSet
If PPathSchema.Trim = [Ô][Ô] Then Throw New Exception([Ô]Não foi informado o local dos arquivos de schema de validação.[Ô])
If IO.Directory.Exists(PPathSchema) = False Then Throw New Exception([Ô]Foi informado a pasta com os arquivos de schema[Ô] & ControlChars.NewLine & PPathSchema & ControlChars.NewLine & [Ô]Mas essa pasta não existe...[Ô])
If IO.File.Exists(Path.Combine(PPathSchema, [Ô]leiauteNFe_v3.10.xsd[Ô])) = False Then Throw New Exception([Ô]Não foi localizado o arquivo leiauteNFe_v3.10.xsd em[Ô] & ControlChars.NewLine & PPathSchema & ControlChars.NewLine & [Ô]Não é possível efetuar a validação[Ô])
If IO.File.Exists(Path.Combine(PPathSchema, [Ô]tiposBasico_v3.10.xsd[Ô])) = False Then Throw New Exception([Ô]Não foi localizado o arquivo tiposBasico_v3.10.xsd em[Ô] & ControlChars.NewLine & PPathSchema & ControlChars.NewLine & [Ô]Não é possível efetuar a validação[Ô])
If IO.File.Exists(Path.Combine(PPathSchema, [Ô]nfe_v3.10.xsd[Ô])) = False Then Throw New Exception([Ô]Não foi localizado o arquivo nfe_v3.10.xsd em[Ô] & ControlChars.NewLine & PPathSchema & ControlChars.NewLine & [Ô]Não é possível efetuar a validação[Ô])
If IO.File.Exists(Path.Combine(PPathSchema, [Ô]xmldsig-core-schema_v1.01.xsd[Ô])) = False Then Throw New Exception([Ô]Não foi localizado o arquivo xmldsig-core-schema_v1.01.xsd em[Ô] & ControlChars.NewLine & PPathSchema & ControlChars.NewLine & [Ô]Não é possível efetuar a validação.[Ô])
SchemaSet.Add([Ô]http://www.portalfiscal.inf.br/nfe[Ô], Path.Combine(PPathSchema, [Ô]leiauteNFe_v3.10.xsd[Ô]))
SchemaSet.Add([Ô]http://www.portalfiscal.inf.br/nfe[Ô], Path.Combine(PPathSchema, [Ô]tiposBasico_v3.10.xsd[Ô]))
SchemaSet.Add([Ô]http://www.portalfiscal.inf.br/nfe[Ô], Path.Combine(PPathSchema, [Ô]nfe_v3.10.xsd[Ô]))
SchemaSet.Add([Ô]http://www.w3.org/2000/09/xmldsig#[Ô], Path.Combine(PPathSchema, [Ô]xmldsig-core-schema_v1.01.xsd[Ô]))
Dim Ler As XmlReaderSettings = New XmlReaderSettings
Ler.ValidationType = ValidationType.Schema
Ler.Schemas = SchemaSet
AddHandler Ler.ValidationEventHandler, AddressOf VerificaErros
Dim Reader As XmlReader = XmlReader.Create(NomeArq, Ler)
While Reader.Read

End While
Reader.Close()
Reader = Nothing
Ler = Nothing
If NFer.Count = 0 Then
Return 0
Else
Return 1
End If
Catch ex As Exception
lista.Add(ex.Message)
Return 1
End Try
End Function


Rodando essa função... se teu xml contiver erros, será retornada uma lista de erros com a mensagem no padrão da SEFAZ
Tópico encerrado , respostas não são mais permitidas