LER XML

PAULOOLIVEIRA 04/04/2012 15:19:38
#399112
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 ?

FOXMAN 05/04/2012 20:06:43
#399248
Resposta escolhida
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.

USUARIO.EXCLUIDOS 06/04/2012 01:43:32
#399259
Aparentemente , seu Temp1 ou Temp2 está incorreto .
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
FOXMAN 06/04/2012 09:50:16
#399261
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...

PAULOOLIVEIRA 06/04/2012 12:29:23
#399263
Muito obrigado a todos, vou testar e retorno
GABICANDELARIA 29/10/2012 16:46:48
#413083
Conseguiu ler o XML dessa forma? Tentei, mas não me retornou valor algum, alguém tem um exemplo de como consigo ler os itens ... Obrigada!
Tópico encerrado , respostas não são mais permitidas