NOTA FISCAL ELETRONICA NF-E . AJUDA NA LEIT/GRAV

MEMLUZ 17/09/2009 12:54:10
#323109
Pessoal,

Estou tentando fazer um rotina de leitura do xml da nfe.
Só que pelos exemplos que peguei, ele não consegue distinguir os nodes do xml.

Alguem tem uma boa rotina de leitura de xml que consiga ler a nfe?

Agradeço qualquer ajuda!

Abs
Mem
PS: Abaixo o codigo que tenho para leitura da NFe

[ô]Instancia o objeto XMLDOM.
Set objXMLDoc = CreateObject([Ô]MSXML2.DOMDocument.4.0[Ô])

[ô]Indicamos que o download em segundo plano não é permitido
objXMLDoc.async = False

[ô]Carrega o domcumento XML
Caminho = server.mappath([Ô].[Ô])
response.write caminho
response.Flush()
response.write [Ô]<br>[Ô]
objXMLDoc.load(Caminho&[Ô]\NF-e.xml[Ô])

[ô]Carrega o domcumento XML
[ô]Para quem possui serviço de REVENDA, utilize este caminho
[ô]objXMLDoc.load([Ô]E:\vhosts\DOMINIO_COMPLETO\httpdocs\internet.xml[Ô])

[ô]O método parseError contém informações sobre o último erro ocorrido
if objXMLDoc.parseError <> 0 then

response.write [Ô]Código do erro: [Ô] & objXMLDoc.parseError.errorCode & [Ô]<br>[Ô]
response.write [Ô]Posição no arquivo: [Ô] & objXMLDoc.parseError.filepos & [Ô]<br>[Ô]
response.write [Ô]Linha: [Ô] & objXMLDoc.parseError.line & [Ô]<br>[Ô]
response.write [Ô]Posição na linha: [Ô] & objXMLDoc.parseError.linepos & [Ô]<br>[Ô]
response.write [Ô]Descrição: [Ô] & objXMLDoc.parseError.reason & [Ô]<br>[Ô]
response.write [Ô]Texto que causa o erro: [Ô] & objXMLDoc.parseError.srcText & [Ô]<br>[Ô]
response.write [Ô]Url do arquivo com problemas: [Ô] & objXMLDoc.parseError.url

else

[ô]A propriedade documentElement refere-se à raiz do documento
Set raiz = objXMLDoc.documentElement
response.write raiz.childNodes.length -1
response.write [Ô]<br>[Ô]
%>
<table border=1>
<%
[ô]Looping para percorrer todos os elementos filhos
For i = 0 to raiz.childNodes.length -1

[ô]A propriedade NodeName contém o nome do elemento
[ô]A propriedade childNodes contém a lista de
[ô]elementos filhos
%><tr><%
%><td><%=raiz.NodeName%></td>
<td><%=raiz.childNodes.item(i).childNodes.item(0).text%></td>
<td><%=raiz.childNodes.item(i).childNodes.item(1).text%></td>
</tr>
<%

Next
%>
</table>
<%
end if

[ô]Destruindo os objetos
Set objXMLDoc = Nothing
Set raiz = Nothing
RODRIGOFERRO 17/09/2009 13:48:07
#323114
amigo, tambem estou atras da mesmo rotina, se alguem puder ajudar agradeco de coracao..

abracos
FOXMAN 17/09/2009 17:35:14
#323135
MEMLUZ 17/09/2009 18:58:06
#323143
Foxman,

Valeu a dica!!!
Li o tópico que vc recomendou, mas ele trata de VB e VB.NET e preciso de um para ASP.
Não consigo colocar uma DLL no meu servidor, pois ele é compartilhado (na locaweb).

Assim, se alguem tiver algo especifico para ASP, agradeço.

Abs,
Mem
MEMLUZ 17/09/2009 20:37:23
#323158
Estou conseguindo ler o XML, mas ainda não consegui separar por topicos.

Segue o arquivo de leitura...

<%@LANGUAGE=[Ô]VBSCRIPT[Ô] CODEPAGE=[Ô]65001[Ô]%>
<!DOCTYPE html PUBLIC [Ô]-//W3C//DTD XHTML 1.0 Transitional//EN[Ô] [Ô]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[Ô]>
<html xmlns=[Ô]http://www.w3.org/1999/xhtml[Ô]>
<head>
<meta http-equiv=[Ô]Content-Type[Ô] content=[Ô]text/html; charset=utf-8[Ô] />
<title>Untitled Document</title>
</head>

<body>

<%
[ô]LER ARQUIVO

[ô] Cria uma instância do controle
Set MsXml = Server.CreateObject([Ô]MSXML2.DOMDocument.4.0[Ô])
[ô] Indicamos que o download em segundo plano não é permitido
MsXml.async = False
[ô] Carrega o documento XML
MsXml.load( Server.MapPath([Ô]nf-e.xml[Ô]) )

[ô] O método parseError contém informações sobre o último erro ocorrido
If MsXml.parseError <> 0 Then
Response.Write [Ô]Código do erro: [Ô]& MsXml.parseError.ErrorCode &[Ô]<br />[Ô]
Response.Write [Ô]Posição no arquivo: [Ô]& MsXml.parseError.FilePos &[Ô]<br />[Ô]
Response.Write [Ô]Linha: [Ô]& MsXml.parseError.Line &[Ô]<br />[Ô]
Response.Write [Ô]Posição na linha: [Ô]& MsXml.parseError.LinePos &[Ô]<br />[Ô]
Response.Write [Ô]Descrição: [Ô]& MsXml.parseError.Reason &[Ô]<br />[Ô]
Response.Write [Ô]Texto que causa o erro: [Ô]& MsXml.parseError.srcText &[Ô]<br />[Ô]
Response.Write [Ô]Arquivo com problemas: [Ô] & MsXml.parseError.URL
Else
[ô] A propriedade documentElement refere-se à raiz do documento
Set raiz = MsXml.documentElement
[ô]Response.Write raiz.NodeName & [Ô]<br />[Ô]
[ô]Looping para percorrer todos os elementos filhos

set teste = MsXml.getElementsByTagName([Ô]infNFe[Ô])
for i = 0 to teste.length - 1
Response.Write teste.item(i).childNodes.NodeName & [Ô]***<br />[Ô]
next


[ô]Set Node = raiz.selectSingleNode([Ô]cUF[Ô])

[ô]if Node = Nothing then
[ô] response.write [Ô]Nao Achei<br>[Ô]
[ô]else[ô]
[ô] response.write Node.text & [Ô]<br />[Ô]
[ô]end if
For i = 0 To raiz.childNodes.length -1
[ô] A propriedade NodeName contém o nome do elemento e a propriedade childNodes contém a lista de elementos filhos
Sub_Node = raiz.childNodes.item(i).childNodes.length
if Sub_Node > 0 then
Response.Write raiz.childNodes.item(i).NodeName & [Ô]<br />[Ô]
for x = 0 to Sub_Node-1
Response.Write raiz.childNodes.item(i).childNodes.item(x).text & [Ô]<br />[Ô]
next
else
[ô]Response.Write cstr(i) & [Ô] - [Ô] & raiz.childNodes.item(i).NodeName & [Ô]<br />[Ô]
[ô]Response.Write raiz.childNodes.item(i).childNodes.item(0).NodeName & [Ô]<br />[Ô]


[ô]Response.Write raiz.childNodes.item(i).childNodes.item(1).text & [Ô]<br />[Ô]
end if
Next
End If

[ô] Tira o objeto da memória
Set MsXml = Nothing

%>
</body>
</html>
MEMLUZ 18/09/2009 16:28:29
#323223
Hoje fiz uma alteração, agora já esta lendo os dados:

Segue o codigo:
<!DOCTYPE html PUBLIC [Ô]-//W3C//DTD XHTML 1.0 Transitional//EN[Ô] [Ô]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[Ô]>
<html xmlns=[Ô]http://www.w3.org/1999/xhtml[Ô]>
<head>
<meta http-equiv=[Ô]Content-Type[Ô] content=[Ô]text/html; charset=utf-8[Ô] />
<title>Untitled Document</title>
</head>

<body>

<%

Dim FctobjXML [ô] Objeto XML
Dim FctobjRoot [ô] Raiz XML

Caminho = server.mappath([Ô].[Ô])
call abre_ArquivoXML(Caminho&[Ô]\NF-e.xml[Ô],FctobjXML,FctobjRoot)
[ô]call abre_ArquivoXML(Caminho&[Ô]\configuracaoloja.xml[Ô],FctobjXML,FctobjRoot)

intQtdElementos = FctobjRoot.childNodes.length

Set Dados_No = FctobjRoot.selectSingleNode([Ô]NFe/infNFe/ide/natOp[Ô])


if TypeName(Dados_No) = [Ô]Nothing[Ô] then response.write [Ô]Falhou[Ô]

response.Flush()

response.write Dados_No.text
[ô]response.write Dados.getAttribute([Ô]TipoBanco[Ô])
Set Dados_No = nothing

response.write [Ô]<br>[Ô]

set nodelist = FctobjRoot.selectNodes([Ô]NFe/infNFe/emit[Ô])
[ô]Response.Write nodelist.attributes.length
for each node in nodelist
Emitente_CNPJ = node.selectSingleNode([Ô]CNPJ[Ô]).text
Emitente_xNome = node.selectSingleNode([Ô]xNome[Ô]).text
Emitente_xLgr = node.selectSingleNode([Ô]enderEmit/xLgr[Ô]).text
Emitente_nro = node.selectSingleNode([Ô]enderEmit/nro[Ô]).text
Emitente_xBairro = node.selectSingleNode([Ô]enderEmit/xBairro[Ô]).text
Emitente_xMun = node.selectSingleNode([Ô]enderEmit/xMun[Ô]).text
Emitente_UF = node.selectSingleNode([Ô]enderEmit/UF[Ô]).text
Emitente_CEP = node.selectSingleNode([Ô]enderEmit/CEP[Ô]).text
Emitente_xPais = node.selectSingleNode([Ô]enderEmit/xPais[Ô]).text
Emitente_fone = node.selectSingleNode([Ô]enderEmit/fone[Ô]).text

next
response.write Emitente_CNPJ
response.write [Ô]<br>[Ô]

response.write Emitente_xNome
response.write [Ô]<br>[Ô]
response.write Emitente_xLgr
response.write [Ô]<br>[Ô]

response.write Emitente_CEP
response.write [Ô]<br>[Ô]

response.write Emitente_fone
response.write [Ô]<br>[Ô]






call fecha_ArquivoXML(FctArquivo,FctobjXML,FctobjRoot,[Ô][Ô])

Sub abre_ArquivoXML(FctArquivo,FctobjXML,FctobjRoot)
[ô]Cira objeto para abertura do XML
set FctobjXML = CreateObject([Ô]Microsoft.XMLDOM[Ô])
FctobjXML.preserveWhiteSpace = False
FctobjXML.async = False
FctobjXML.validateOnParse = True
FctobjXML.resolveExternals = True
FctobjXML.load (FctArquivo)
Set FctobjRoot = FctobjXML.documentElement

if FctobjXML.parseError <> 0 then
response.write [Ô]Código do erro: [Ô] & FctobjXML.parseError.errorCode & [Ô]<br>[Ô]
response.write [Ô]Posição no arquivo: [Ô] & FctobjXML.parseError.filepos & [Ô]<br>[Ô]
response.write [Ô]Linha: [Ô] & FctobjXML.parseError.line & [Ô]<br>[Ô]
response.write [Ô]Posição na linha: [Ô] & FctobjXML.parseError.linepos & [Ô]<br>[Ô]
response.write [Ô]Descrição: [Ô] & FctobjXML.parseError.reason & [Ô]<br>[Ô]
response.write [Ô]Texto que causa o erro: [Ô] & FctobjXML.parseError.srcText & [Ô]<br>[Ô]
response.write [Ô]Url do arquivo com problemas: [Ô] & FctobjXML.parseError.url
end if

End Sub

Sub fecha_ArquivoXML(FctArquivo,FctobjXML,FctobjRoot,Acao)
[ô]Fecha arquivo de XML
If Acao = [Ô]alterar[Ô] Then
FctobjXML.save(FctArquivo)
End If
[ô]Libera objetos da memória
set FctobjXML = Nothing
Set FctobjRoot = Nothing

End Sub


%>
</body>
</html>



MEMLUZ 23/09/2009 09:40:56
#323483
Pessoal,

Consegui!!!!

Vou colocar o codigo anexo. Ele lê o XML da NFe.
A única coisa que não achei, foii a hora da Saída.

Abs,
Mem
PS: Podem usar o código, desde que preservado os dados do autor.
Tópico encerrado , respostas não são mais permitidas