Fazer loop no clientdataset xml

Delphi

16/09/2011

Pessoal estou com uma dúvida tremenda.
Como faço para carregar ao mesmo tempo vários xml no clientdataset e se isso tbm é possível.
O que quero fazer: Meu cliente tem 50 arquivos xml correspondente a NFE, já efetuei a transformação no XML Mapper e está carregando corretamente no dbgrid, porém só carrega 1 xml e preciso que carregue vários.
Alguém pode me ajudar, pois preciso solucionar isso na empresa.
Abrigado.
David Sobral

David Sobral

Curtidas 0

Respostas

Marco Salles

Marco Salles

16/09/2011

Um Xml por vez ...
Para utilizar o mesmo clientdataSet , utilize loadfromfile com ele fechado e deposde um open
GOSTEI 0
Gustavo Bretas

Gustavo Bretas

16/09/2011

E ae David

Realmente, só um XML por vez, maaassss... rs!

Pq vc ñ cria outro ClientDataSet para comportar os dados que vc precisa?

Daí vc faz um looping na pasta, carregando os xml, e transferindo os dados para o segundo DataSet!

Abraço!
GOSTEI 0
Otavio Pimenta

Otavio Pimenta

16/09/2011

adicione um componente txmldocument no form.

VAR
VXMLDOC_P1{,VXMLDOC_P2}: txmldocument;
NodeIdentificacao,nodemensagem:ixmlNode;
BEGIN

VXMLDOC_P1.LOADFromfile(FilenameEdit1.FileName);
OU
VXMLDOC_P1.LoadFromFile(C:\PASTA1\pASTA2\teste.xml);

VXMLDOC_P1.Active:=true;
....
....
nodemensagem:= VXMLDOC_P1.DocumentElement.ChildNodes[mensagem].ChildNodes[ansParaOperadora].ChildNodes[conferencia].ChildNodes.FindNode(beneficiario);
if (nodemensagem = nil )then
begin
//FAZ SUAS VALIDAÇOES
END
...
...
if not(nodemensagem = nil) then
begin
//FAZ SUAS VALIDAÇOES
END;
REPEAT
if not(NodeIdentificacao = nil) then
begin
CAMPO1:= NodeIdentificacao.ChildNodes[CAMPO].Text;
CAMPO2:= NodeIdentificacao.ChildNodes[CAMPO].Text;
END;
....E POR AI VAI
until nodemensagem = nil;


É ISSO, ESPERO QUE AJUDE
GOSTEI 0
Otavio Pimenta

Otavio Pimenta

16/09/2011

adicione um componente txmldocument no form.

VAR
VXMLDOC_P1{,VXMLDOC_P2}: txmldocument;
NodeIdentificacao,nodemensagem:ixmlNode;
BEGIN

VXMLDOC_P1.LOADFromfile(FilenameEdit1.FileName);
OU
VXMLDOC_P1.LoadFromFile(C:\PASTA1\pASTA2\teste.xml);

VXMLDOC_P1.Active:=true;
....
....
nodemensagem:= VXMLDOC_P1.DocumentElement.ChildNodes[nó1].ChildNodes[nó2].ChildNodes[nó3].ChildNodes.FindNode(no4);
if (nodemensagem = nil )then
begin
//FAZ SUAS VALIDAÇOES
END
...
...
if not(nodemensagem = nil) then
begin
//FAZ SUAS VALIDAÇOES
END;
REPEAT
if not(NodeIdentificacao = nil) then
begin
CAMPO1:= NodeIdentificacao.ChildNodes[CAMPO].Text;
CAMPO2:= NodeIdentificacao.ChildNodes[CAMPO].Text;
END;
....E POR AI VAI
until nodemensagem = nil;


É ISSO, ESPERO QUE AJUDE
GOSTEI 0
David Sobral

David Sobral

16/09/2011

Obrigado pela pela dica, em breve retorno para informar o resultado.
GOSTEI 0
David Sobral

David Sobral

16/09/2011

Consegui fazer o que estava o loop
GOSTEI 0
POSTAR