Ler xml com diversos niveis
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
Curtidas 0
Respostas
Osvaldo Anjo
18/10/2018
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;
GOSTEI 0