ERRO AO VALIDAR O XSD COM XML DA NFE EM VB.NET
Estou validando o XML com o XSD da Nf-e e esta ocorrendo o erro apos a validação do CRT:
Referência de objeto não definida para uma instância de um objeto
pelo que eu vi no XSD , e no manual da NFE o erro ocorre ao acessar a tag avulsa, so que no xml nao tem essa TAG. Como devo proceder, para que esse erro nao ocorra e XML possa ser validado ate o final?
Referência de objeto não definida para uma instância de um objeto
pelo que eu vi no XSD , e no manual da NFE o erro ocorre ao acessar a tag avulsa, so que no xml nao tem essa TAG. Como devo proceder, para que esse erro nao ocorra e XML possa ser validado ate o final?
Public Shared Sub ValidarXML(pServico As Enumerador.ServicoNFE,
pXML As XDocument)
Try
Dim settings As New XmlReaderSettings()
AddHandler settings.ValidationEventHandler, AddressOf ValidationEventHandler
gValidacaoXML = True
gErrosValidacaoXML = Nothing
settings.ValidationType = ValidationType.Schema
settings.Schemas.Add([Ô]http://www.portalfiscal.inf.br/nfe[Ô], [Ô]C:\XML\SchemaNFe
fe_v3.10.xsd[Ô])
Using XmlValidatingReader As XmlReader = XmlReader.Create([Ô]c:
fe.xml[Ô], settings)
While XmlValidatingReader.Read()
End While
End Using
Catch ex As Exception
gErrosValidacaoXML.Add(ex.Message)
Exit Sub
End Try
End Sub
Public Shared Sub ValidationEventHandler(ByVal sender As Object, ByVal args As ValidationEventArgs)
gValidacaoXML = False
gErrosValidacaoXML.Add(vbTab + [Ô]Erro de Validação : [Ô] + args.Message)
If args.Severity = XmlSeverityType.Warning Then
MessageBox.Show([Ô]Nenhum arquivo de Schema foi encontrado para efetuar a validação...[Ô])
ElseIf args.Severity = XmlSeverityType.Error Then
MessageBox.Show([Ô]Ocorreu um erro durante a validação....[Ô])
Else
MessageBox.Show(vbTab + [Ô]Erro de Validação : [Ô] + args.Message)
End If
If Not (args.Exception Is Nothing) Then [ô] Erro na validação do schema XSD
MessageBox.Show(args.Exception.SourceUri + [Ô],[Ô] & args.Exception.LinePosition & [Ô],[Ô] & args.Exception.LineNumber)
End If
End Sub
Mostre a linha que gera o erro.
Esta nesse ponto... quando o while le o bloco e nao encontra a tAG no xml correspondente ao xsd aborta e da a mensagem Referência de objeto não definida para uma instância de um objeto
Using XmlValidatingReader As XmlReader = XmlReader.Create([Ô]c:
fe.xml[Ô], settings)
While XmlValidatingReader.Read()
End While
End Using
Tente assim:
Using XmlValidatingReader As [txt-color=#e80000]NEW[/txt-color] XmlReader = XmlReader.Create([Ô]c:
fe.xml[Ô], settings)
While XmlValidatingReader.Read()
End While
End Using
ou assim:
Using XmlValidatingReader As XmlReader = XmlReader.Create([Ô]c:
fe.xml[Ô], settings)
While [txt-color=#e80000]XmlReader[/txt-color] .Read()
End While
End Using
Using XmlValidatingReader As [txt-color=#e80000]NEW[/txt-color] XmlReader = XmlReader.Create([Ô]c:
fe.xml[Ô], settings)
While XmlValidatingReader.Read()
End While
End Using
ou assim:
Using XmlValidatingReader As XmlReader = XmlReader.Create([Ô]c:
fe.xml[Ô], settings)
While [txt-color=#e80000]XmlReader[/txt-color] .Read()
End While
End Using
Nao deu certo... o erro permanece
No while teria que tratar as TAGS que nao existem no XML da NF-e... é essa a impressão que dá... mas nao sei como fazer isso.... Porque o erro de referencia é justamente uma TAG que contem no XSD e nao existe no XML, por se tratar de um opcional.
Como fazer para ignorar as TAG que nao sao obrigatorias?
No while teria que tratar as TAGS que nao existem no XML da NF-e... é essa a impressão que dá... mas nao sei como fazer isso.... Porque o erro de referencia é justamente uma TAG que contem no XSD e nao existe no XML, por se tratar de um opcional.
Como fazer para ignorar as TAG que nao sao obrigatorias?
O que acontece é que o objeto que está sendo usado não foi instanciado. Acredito que quando você usa o XmlReader.Create, ele retorna essa instância pra você. Talvez isso não esteja acontecendo por um erro gerado dentro dele, ou o arquivo que você está passando não existe ou está com problemas, ou então, a variável que você usou para receber a instância não seja do tipo XmlValidatingReader, e sim do tipo XmlReader. Poste o código desse método aqui pra analisarmos.
Tenta assim pra ver se vai:
Using [txt-color=#e80000]XmlReader[/txt-color] As xmlReader = XmlReader.Create([Ô]c:
fe.xml[Ô], settings)
While xmlReader .Read()
End While
End Using
Tenta assim pra ver se vai:
Using [txt-color=#e80000]XmlReader[/txt-color] As xmlReader = XmlReader.Create([Ô]c:
fe.xml[Ô], settings)
While xmlReader .Read()
End While
End Using
Pacote usado de XSD: Esquemas XML NF-e - Pacote de Liberação No. 8i2 (CFOP EXTERNO) (13/04/2016) (ZIP)
Segue o XML usados:
Segue o XML usados:
<?xml version=[Ô]1.0[Ô] encoding=[Ô]utf-8[Ô]?>
<NFe xmlns=[Ô]http://www.portalfiscal.inf.br/nfe[Ô]>
<infNFe Id=[Ô]NFe35160607254575000260550000000000021491581247[Ô] versao=[Ô]3.10[Ô]>
<ide>
<cUF>35</cUF>
<cNF>49158124</cNF>
<natOp>VENDA</natOp>
<indPag>0</indPag>
<mod>55</mod>
<serie>0</serie>
<nNF>2</nNF>
<dhEmi>2016-06-03T08:35:33-03:00</dhEmi>
<dhSaiEnt>2016-06-03T08:35:33-03:00</dhSaiEnt>
<tpNF>1</tpNF>
<idDest>1</idDest>
<cMunFG>3506508</cMunFG>
<tpImp>0</tpImp>
<tpEmis>1</tpEmis>
<cDV>7</cDV>
<tpAmb>2</tpAmb>
<finNFe>1</finNFe>
<indFinal>0</indFinal>
<indPres>9</indPres>
<procEmi>0</procEmi>
<verProc>1.0.0.0</verProc>
</ide>
<emit>
<CNPJ>99999999000191</CNPJ>
<xNome>NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL</xNome>
<enderEmit>
<xLgr>RUA BENTO DA CRUZ</xLgr>
<nro>1070</nro>
<xBairro>CENTRO</xBairro>
<cMun>3506508</cMun>
<xMun>BIRIGUI</xMun>
<UF>SP</UF>
<CEP>16200108</CEP>
<cPais>1058</cPais>
<xPais>BRASIL</xPais>
</enderEmit>
<IE>ISENTO</IE>
<IM>24030</IM>
<CNAE>4782202</CNAE>
<CRT>1</CRT>
</emit>
<dest>
<CNPJ>34748126000160</CNPJ>
<xNome>EMPRESA EXEMPLO</xNome>
<enderDest>
<xLgr>RUA BENTO DA CRUZ</xLgr>
<nro>7547</nro>
<xBairro>CENTRO</xBairro>
<cMun>3506508</cMun>
<xMun>BIRIGUI</xMun>
<UF>SP</UF>
<CEP>16200108</CEP>
<cPais>1058</cPais>
<xPais>BRASIL</xPais>
</enderDest>
<indIEDest>1</indIEDest>
<IE>516106509974</IE>
<IM>1241</IM>
</dest>
<total>
<ICMSTot>
<vBC>0.00</vBC>
<vICMS>0.00</vICMS>
<vICMSDeson>0.00</vICMSDeson>
<vBCST>0.00</vBCST>
<vST>0.00</vST>
<vProd>0.00</vProd>
<vFrete>0.00</vFrete>
<vSeg>0.00</vSeg>
<vDesc>0.00</vDesc>
<vII>0.00</vII>
<vIPI>0.00</vIPI>
<vPIS>0.00</vPIS>
<vCOFINS>0.00</vCOFINS>
<vOutro>0.00</vOutro>
<vNF>0.00</vNF>
<vTotTrib>0.00</vTotTrib>
</ICMSTot>
</total>
<transp>
<modFrete>9</modFrete>
</transp>
</infNFe>
</NFe>
Eu estava me referindo ao código do método XmlReader.Create; Qual é o tipo de retorno dele? Como ele foi feito?
Cara foi feito da forma que coloquei a função acima.... é estranho nao sei mais o que fazer e olhar...
O XmlReader.Create deve possuir um tipo de retorno. Qual é?
ele deve retornar e validar com o schema... ele retorna um objeto. Peguei um xml de um fornecedor e deu o mesmo erro ao validar o XML, será que algum bug do VS2012?
Tópico encerrado , respostas não são mais permitidas