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

<?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

Osvaldo Anjo

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;


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar