Ler xml com diversos niveis
18/10/2018
0
Boa tarde.
Preciso ler os seguintes tags
codigoncm - pegar o conteúdo desse campo,
listaAtributos
atributo
codigo - pegar o conteúdo desse campo
dominio
itemDominio
codigo - pegar o conteudo desse campo
o xml é esse abaixo, ja tentei de diversas maneiras mas não conseguí chegar a um resultado.
Desde ja agradeço qualquer ajuda
Preciso ler os seguintes tags
codigoncm - pegar o conteúdo desse campo,
listaAtributos
atributo
codigo - pegar o conteúdo desse campo
dominio
itemDominio
codigo - pegar o conteudo desse campo
o xml é esse abaixo, ja tentei de diversas maneiras mas não conseguí chegar a um resultado.
Desde ja agradeço qualquer ajuda
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ConsultaAtributoNcmResponse> <listaNcm> <ncm> <codigoNcm>0101.21.00</codigoNcm> <listaAtributos> <atributo> <codigo>ATT_1</codigo> <nomeApresentacao>Destaque</nomeApresentacao> <tipoAtributo>Simples</tipoAtributo> <orientacaoPreenchimento>Escolher apenas um Destaque</orientacaoPreenchimento> <formaPreenchimento>Lista estática</formaPreenchimento> <modalidade>Exportação</modalidade> <obrigatorio>true</obrigatorio> <dataInicioVigencia>2014-10-23T00:00:00-02:00</dataInicioVigencia> <dominio> <itemDominio> <codigo>01</codigo> <descricao>EXCETO DE ESPÉCIES DOMÉSTICAS, CONFORME PORTARIA IBAMA 93/98</descricao> </itemDominio> <itemDominio> <codigo>99</codigo> <descricao>DEMAIS</descricao> </itemDominio> </dominio> <objetivos> <objetivo> <codigo>3</codigo> <descricao>Tratamento administrativo</descricao> </objetivo> </objetivos> <orgaos> <orgao>SECEX</orgao> <orgao>IBAMA</orgao> </orgaos> <formaPreenchimentoAtributo>LISTA_ESTATICA</formaPreenchimentoAtributo> </atributo> </listaAtributos> </ncm> <ncm> <codigoNcm>0101.29.00</codigoNcm> <listaAtributos> <atributo> <codigo>ATT_2</codigo> <nomeApresentacao>Destaque</nomeApresentacao> <tipoAtributo>Simples</tipoAtributo> <orientacaoPreenchimento>Escolher apenas um Destaque</orientacaoPreenchimento> <formaPreenchimento>Lista estática</formaPreenchimento> <modalidade>Exportação</modalidade> <obrigatorio>true</obrigatorio> <dataInicioVigencia>2014-10-23T00:00:00-02:00</dataInicioVigencia> <dominio> <itemDominio> <codigo>01</codigo> <descricao>EXCETO DE ESPÉCIES DOMÉSTICAS, CONFORME PORTARIA IBAMA 93/98</descricao> </itemDominio> <itemDominio> <codigo>99</codigo> <descricao>DEMAIS</descricao> </itemDominio> </dominio> <objetivos> <objetivo> <codigo>3</codigo> <descricao>Tratamento administrativo</descricao> </objetivo> </objetivos> <orgaos> <orgao>SECEX</orgao> <orgao>IBAMA</orgao> </orgaos> <formaPreenchimentoAtributo>LISTA_ESTATICA</formaPreenchimentoAtributo> </atributo> </listaAtributos> </ncm>
Osvaldo Anjo
Curtir tópico
+ 0
Responder
Posts
18/10/2018
Osvaldo Anjo
Boa tarde
Consegui resolver da seguinte forma.
vXMLDoc:= TXMLDocument.create (nil);
vXMLDoc.Active:= false;
vxmlDoc.LoadFromFile(OpenDialog1.FileName);
vXMLDoc.Active:= true;
NodePai :=vXMLDoc.DocumentElement.childNodes.FindNode('listaNcm');
if not (nodepai = nil) then
begin
NodePai.ChildNodes.First;
NodeNcm :=nodePai.childNodes.FindNode('ncm');
NodeNcm.ChildNodes.First;
if not (NodeNCM = nil) then
begin
codigo:=NodeNcm.ChildNodes['codigoNcm'].Text;
NodeNcm.ChildNodes.First;
repeat
codigo := NodeNcm.ChildNodes['codigoNcm'].text;
if codigo <> '' then
begin
atributo:='';
dominio:='';
codigo:=NodeNcm.ChildNodes['codigoNcm'].Text;
NodeListaAtrib :=nodeNcm.childNodes.FindNode('listaAtributos');
NodeListaAtrib.ChildNodes.First;
if not (NodeListaAtrib = nil) then
begin
nodeAtrib:=nodeListaAtrib.ChildNodes.FindNode('atributo');
if nodeAtrib <> nil then
begin
nodeAtrib.ChildNodes.First;
if not (nodeAtrib = nil) then
begin
atributo:=NodeAtrib.ChildNodes['codigo'].Text;
nodeDominio:=nodeAtrib.ChildNodes.FindNode('dominio');
nodeDominio.ChildNodes.First;
if not (nodeDominio = nil) then
begin
nodeItemDominio:=nodeDominio.ChildNodes.FindNode('itemDominio');
nodeItemDominio.ChildNodes.First;
if not (nodeItemDominio = nil) then
begin
dominio:=nodeItemDominio.ChildNodes['codigo'].Text;
repeat
dominio:=nodeItemDominio.ChildNodes['codigo'].Text;
if dominio <> '' then
begin
dominio:=nodeItemDominio.ChildNodes['codigo'].Text;
end;
nodeItemDominio := nodeItemDominio.NextSibling;
until nodeItemDominio = nil;
end;
end;
end;
end;
end;
end;
memo1.Lines.Add('ncm: '+codigo+' Atributo: '+atributo+' Domínio: ' +dominio);
NodeNcm := NodeNcm.NextSibling;
until NodeNcm = nil; //Repeat
end;
end;
vXMLDoc.Active:= False;
vXMLDoc:= nil;
Consegui resolver da seguinte forma.
vXMLDoc:= TXMLDocument.create (nil);
vXMLDoc.Active:= false;
vxmlDoc.LoadFromFile(OpenDialog1.FileName);
vXMLDoc.Active:= true;
NodePai :=vXMLDoc.DocumentElement.childNodes.FindNode('listaNcm');
if not (nodepai = nil) then
begin
NodePai.ChildNodes.First;
NodeNcm :=nodePai.childNodes.FindNode('ncm');
NodeNcm.ChildNodes.First;
if not (NodeNCM = nil) then
begin
codigo:=NodeNcm.ChildNodes['codigoNcm'].Text;
NodeNcm.ChildNodes.First;
repeat
codigo := NodeNcm.ChildNodes['codigoNcm'].text;
if codigo <> '' then
begin
atributo:='';
dominio:='';
codigo:=NodeNcm.ChildNodes['codigoNcm'].Text;
NodeListaAtrib :=nodeNcm.childNodes.FindNode('listaAtributos');
NodeListaAtrib.ChildNodes.First;
if not (NodeListaAtrib = nil) then
begin
nodeAtrib:=nodeListaAtrib.ChildNodes.FindNode('atributo');
if nodeAtrib <> nil then
begin
nodeAtrib.ChildNodes.First;
if not (nodeAtrib = nil) then
begin
atributo:=NodeAtrib.ChildNodes['codigo'].Text;
nodeDominio:=nodeAtrib.ChildNodes.FindNode('dominio');
nodeDominio.ChildNodes.First;
if not (nodeDominio = nil) then
begin
nodeItemDominio:=nodeDominio.ChildNodes.FindNode('itemDominio');
nodeItemDominio.ChildNodes.First;
if not (nodeItemDominio = nil) then
begin
dominio:=nodeItemDominio.ChildNodes['codigo'].Text;
repeat
dominio:=nodeItemDominio.ChildNodes['codigo'].Text;
if dominio <> '' then
begin
dominio:=nodeItemDominio.ChildNodes['codigo'].Text;
end;
nodeItemDominio := nodeItemDominio.NextSibling;
until nodeItemDominio = nil;
end;
end;
end;
end;
end;
end;
memo1.Lines.Add('ncm: '+codigo+' Atributo: '+atributo+' Domínio: ' +dominio);
NodeNcm := NodeNcm.NextSibling;
until NodeNcm = nil; //Repeat
end;
end;
vXMLDoc.Active:= False;
vXMLDoc:= nil;
Responder
Clique aqui para fazer login e interagir na Comunidade :)