Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou com um problema em um web application que estou trabalhando no ASP.NET com VB.
Eis que o usuário faz um upload de um modelo XML para o servidor, até ai tudo bem, porém quando vou usar o XMLDocument para poder abrir o arquivo e depois ler todas as tags que preciso ele dá um erro: "Referência de objeto não definida para instancia de objeto".
Porém já usei o new e também já defini todos os objetos novos, e não sei qual é o problema, já me disseram que é devido ao fato de que a tag solicitada não está sendo encontrada, mas ela está lá, já tentei colocar nodo a nodo do xml, também já tentei por Root e mesmo assim ele não encontra ou não funciona.
A linha que dá erro é esta:
[inline]Dim numeroNF As Integer = Convert.ToInt32(oXML.SelectSingleNode("nfeProc").ChildNodes(0).ChildNodes(0).ChildNodes(0).ChildNodes(6).InnerText)[/inline]
Este é o bloco completo:
Dim oXML As System.Xml.XmlDocument = New System.Xml.XmlDocument
oXML.Load(path)
Dim numeroNF As Integer = Convert.ToInt32(oXML.SelectSingleNode("nfeProc").ChildNodes(0).ChildNodes(0).ChildNodes(0).ChildNodes(6).InnerText)
Dim serieNF As String = oXML.SelectSingleNode("nfeProc").ChildNodes(0).ChildNodes(0).ChildNodes(0).ChildNodes(6).InnerText
Dim dataemisNF As String = oXML.SelectSingleNode("ide").ChildNodes(7).InnerText
Dim cnpjemis As Integer = Convert.ToInt32(oXML.SelectSingleNode("emit").ChildNodes(0).InnerText)
Dim emissor As String = oXML.SelectSingleNode("emit").ChildNodes(1).InnerText
Dim cpfdest As Integer = Convert.ToInt32(oXML.SelectSingleNode("dest").ChildNodes(0).InnerText)
Dim destinatario As String = oXML.SelectSingleNode("dest").ChildNodes(1).InnerText
Dim valorNF As Double = Convert.ToDouble(oXML.SelectSingleNode("total").ChildNodes(0).ChildNodes(13).InnerText)
Como vocês podem ver, há duas maneiras que estou buscando, porém ele não chega a passar da primeira linha.
Eu não consigo ver, porque ele não mostra nenhum resultado, ele dá o erro antes de mostrar qualquer coisa.
Faz uma verificação da existência do arquivo antes de fazer o Load dele.
o arquivo existe porque eu faço o upload dele, já verifiquei nos breakpoints também, o load lê o arquivo corretamente.
Pensei que pudesse ser um delay entre o upload e gravação física em disco, daí o Load não o encontrava.
Tem como postar um exemplo do xml?
Os primeiros campos são assim:
<?xml version="1.0" encoding="UTF-8"?>
<nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versao="2.00">
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe35120760894136001609550030000359531000359532" versao="2.00">
<ide>
<cUF>35</cUF>
<cNF>00035953</cNF>
<natOp>#</natOp>
<indPag>0</indPag>
<mod>55</mod>
<serie>#</serie>
<nNF>#</nNF>
<dEmi>2012-07-11</dEmi>
<tpNF>1</tpNF>
<cMunFG>3548708</cMunFG>
<tpImp>1</tpImp>
<tpEmis>1</tpEmis>
<cDV>2</cDV>
<tpAmb>1</tpAmb>
<finNFe>1</finNFe>
<procEmi>0</procEmi>
<verProc>2.6.1.1</verProc>
</ide>
Quero pegar o campo nNF e serieDim oXML As System.Xml.XmlDocument = New System.Xml.XmlDocument
Dim ns As System.Xml.XmlNamespaceManager = New System.Xml.XmlNamespaceManager(oXML.NameTable)
Dim NodeRoot As System.Xml.XmlNode
ns.AddNamespace("nfe", "http://www.portalfiscal.inf.br/nfe")
oXML.Load(arquivo)
NodeRoot = oXML.SelectSingleNode("nfe:nfeProc/nfe:NFe/nfe:infNFe/nfe:ide", ns)
Dim numeroNF As Integer = Convert.ToInt32(NodeRoot.ChildNodes(6).InnerText)
Dim serieNF As String = NodeRoot.ChildNodes(5).InnerText
Putz cara obrigado mesmo, funcionou aqui, agora se eu quiser pegar outros nodos alem deste posso declarar o root um pouco mais abrangente.
Debugue e olhe qual dos objetos esta nulo. Quais dos níveis do ChildNodes esta nulo.
Abraços...