LER XML
alguem ja precisou ler o xml da nfe ?
estou tentando assim:
Set doc = Nothing
Set doc = New DOMDocument
doc.Load carquivo
temp1 = doc.documentElement.getElementsByTagName([Ô]nProt[Ô]).Item(0).Text
temp2 = doc.documentElement.getElementsByTagName([Ô]chNFe[Ô]).Item(0).Text etc...
mais estou com problemas para ler os itens ..
Alguem ja passou por isso ?
Citação::
Caros amigos,
alguem ja precisou ler o xml da nfe ?
estou tentando assim:
Set doc = Nothing
Set doc = New DOMDocument
doc.Load carquivo
temp1 = doc.documentElement.getElementsByTagName([Ô]nProt[Ô]).Item(0).Text
temp2 = doc.documentElement.getElementsByTagName([Ô]chNFe[Ô]).Item(0).Text etc...
mais estou com problemas para ler os itens ..
Alguem ja passou por isso ?
Apesar de sua intenção ser apenas leitura do xml e não importação AUTOMÃTICA da NFE para o seu sistema.....te digo o seguinte.
Essa ae não será a sua maior dificuldade não, eu já faço a leitura parcial do xml da nfe, o problema está na lógica do negócio.
Por exemplo :
Como descobrir qual produto já esta cadastrado no sistema(levando em consideração uma NFE cujo EAN não tenha sido informado, tendo com informação do produto o código do fornecedor.)
Ahhh, vai ter gente dizendo : é só buscar os produtos de tal fornecedor.
Ae eu digo : E se for um produto que é distribuido por diversos fornecedores ???
Ae alguém vai dizer. Cria uma tabela auxiliar para armazenar os codigos interno do produto relacionando com os códigos do produto do fornecedor.
Ae eu digo : E se o fornecedor for um Novo fornecedor ????
Ae ferrou ???
Sinteticamente falando não existe nenhuma regra de negócio eficaz, ao ponto de determinar qual produto estou importando(SALVO SE TODAS AS NFEs VIESSEM COM O EAN OBRIGATÓRIAMENTE).
Agora veja o exemplo de leitura de xml no seguinte tópico : http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=337965&varWorld=
Tem uma classe no projeto que faz leitura do xml.
Pois Getelement seria se voce estar lendo uma pagina de internet que nao é o caso
Voce precisa fazer é Selectnodes
A estrutura do xml tem hirearquia .... sua tag nProt ou chNFE provavelmente nao seria esse caminho a ser lido tb
seria
o caminho ao todo da primeira tag /nfeProc/NFe/infNFe/ide/nNF
quando vc abre o xml , no navegador ele aparece uns sinals de + .... isso vc interpretara até chegar no Nodes como [Ô]/[Ô]
é bem simples fazer isso. seguindo o que eu disse
qualque coisa posta ai
Dim doc As New XmlDocument
doc.Load(pathXml)
Dim nodes As XmlNodeList = doc.SelectNodes([Ô]Pedidos/Pedido[Ô])
For Each node As XmlNode In nodes
NumNota = node.SelectSingleNode([Ô]NumNota[Ô]).InnerText
Cliente = node.SelectSingleNode([Ô]Cliente[Ô]).InnerText
Prazo = node.SelectSingleNode([Ô]Prazo[Ô]).InnerText
Desconto = node.SelectSingleNode([Ô]Desconto[Ô]).InnerText
TipoPagamento = node.SelectSingleNode([Ô]TipoPagamento[Ô]).InnerText
CodigoCliente = node.SelectSingleNode([Ô]CodigoCliente[Ô]).InnerText
Vendedor = node.SelectSingleNode([Ô]Vendedor[Ô]).InnerText
DataDoPedido = node.SelectSingleNode([Ô]DataDoPedido[Ô]).InnerText
Observacao = node.SelectSingleNode([Ô]Observacao[Ô]).InnerText
StatusP = node.SelectSingleNode([Ô]StatusP[Ô]).InnerText
TotalGeral = node.SelectSingleNode([Ô]TotalGeral[Ô]).InnerText
StatusEnvio = node.SelectSingleNode([Ô]StatusEnvio[Ô]).InnerText
Next
Com o exemplo assim estou lendo um xml de pedidos que eu gero nos dispositivos móveis para importação no retaguarda.
A estrutura do xml seria algo assim :
Citação:<Pedidos> -<Pedido> <NumNota>12599</NumNota> <Cliente>ANA CLAUDIA DE PAULA MARTINS</Cliente> <Prazo>30/60</Prazo> <Desconto>0,0000</Desconto> <TipoPagamento>Cheque</TipoPagamento> <CodigoCliente>850</CodigoCliente> <Vendedor>4</Vendedor> <DataDoPedido>30/03/12 12:00:00</DataDoPedido> <Observacao>30/60 dias</Observacao> <StatusP>PENDENTE</StatusP> <TotalGeral>85,50</TotalGeral> <StatusEnvio>N</StatusEnvio> -<Produtos> <Pessoa>850</Pessoa> <TransId>12599</TransId> <ItemCode>2512</ItemCode> <ItemName>BASE PROTETORA HAIR WAY 100ML</ItemName> <Qtde>1</Qtde> <Preco>R$ 21,00</Preco> <Total>R$ 21,00</Total> </Produtos> -<Produtos> <Pessoa>850</Pessoa> <TransId>12599</TransId> <ItemCode>4</ItemCode> <ItemName>TINT ITAL. 4 CAST. MEDIO</ItemName> <Qtde>2</Qtde> <Preco>R$12,90</Preco> <Total>R$ 25,80</Total> </Produtos> -<Produtos> <Pessoa>850</Pessoa> <TransId>12599</TransId> <ItemCode>8</ItemCode> <ItemName>TINT ITAL. LOU. CLARO 8</ItemName> <Qtde>3</Qtde> <Preco>R$ 12,90</Preco> <Total>R$ 38,70</Total> </Produtos> </Pedido> </Pedidos>
Dentro desse xml tem a Tag Produtos, e esta eu faço a leitura da seguinte maneira :
Dim doc As New XmlDocument
doc.Load(pathXml)
Dim nodesProdutos As XmlNodeList = doc.SelectNodes([Ô]Pedidos/Pedido/Produtos[Ô])
For Each nodex As XmlNode In nodesProdutos
If nodex.SelectSingleNode([Ô]TransId[Ô]).InnerText = codigoPedido Then
Pessoa = nodex.SelectSingleNode([Ô]Pessoa[Ô]).InnerText
TransId = nodex.SelectSingleNode([Ô]TransId[Ô]).InnerText
ItemCode = nodex.SelectSingleNode([Ô]ItemCode[Ô]).InnerText
ItemName = nodex.SelectSingleNode([Ô]ItemName[Ô]).InnerText
Qtde = nodex.SelectSingleNode([Ô]Qtde[Ô]).InnerText
Preco = nodex.SelectSingleNode([Ô]Preco[Ô]).InnerText
Total = nodex.SelectSingleNode([Ô]Total[Ô]).InnerText
End IF
Next
Observe que basta passar o caminho correto do node que vc quer fazer a leitura.
Dim nodesProdutos As XmlNodeList = doc.SelectNodes([Ô]Pedidos/Pedido/Produtos[Ô])
Citação:<Pedidos>
<Pedido>
...
<Produtos>
....
....
</Produtos>
</Pedido>
</Pedidos>
Para NFe seria algo assim :
Dim nodesProdutos As XmlNodeList = doc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô])
Aà é só dar o For Each...Next como descrevi acima...