Ir para conteúdo
  • Cadastre-se

dev botao

Ler Atributos do XML dentro de um nó


  • Este tópico foi criado há 2120 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa Tarde,

Tenho um certo XML que tem essas informações ...
<PENDENCIA_FINANCEIRA_BLOCO>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:resultado xmlns:ns2="http://webservice.consulta...org/" restricao="false" data="2016-08-31T07:20:31.053-03:00">
<protocolo numero="1606026836" digito="4"/> 
<operador codigo="256321" nome="INFOCAR"/> 
<consumidor>
<consumidor-pessoa-fisica data-nascimento="1982-09-07T00:00:00-03:00" idade="33" nome="LUIZ MENEZES FILHO" nome-mae="ELY SOUZA MENEZES" numero-titulo-eleitor="293751740191" sexo="MASCULINO" signo="VIRGEM">
<cpf regiao-origem="SAO PAULO" numero="22379580847"/> 

Eu gostaria de PEGAR os valores dos atributos que estão dentro de RESULTADO.
Como faça para pegar a informação que está em >>>> numero-titulo-eleitor="293751740191" <<<<

xml.xml

Eu uso alguns códigos, mas só consigo pegar o que está entre TAGS e mesmo assim ... preciso ficar percorrendo a árvore ... não consigo ir já direto para uma sub sub TAG.

Queria algo assim:

  XMLDoc1 := TXMLDocument.Create(Self);
  XMLDoc1.FileName := 'C:\Documents and Settings\Mario Franca\Desktop\xml.xml';
  XMLDoc1.Active := True;
  Atributo := GetINFOXML(XMLDoc1);
  ShowMessage(Atributo.XML);

  resposta.Lines.Add('Nome..............: ' + VarToStr(Atributo.PESQUISA.PENDENCIA_FINANCEIRA_BLOCO.Envelope.Body.Resultado.AttributeNodes[' numero-titulo-eleitor ']));

 

Mas atualmente está ficando BRANCO no memo.

Link para o comentário
Compartilhar em outros sites

  • 7 meses depois ...

Vamos lá.

Eu recebo a XML após um post ... e a guardo dentro do componente XMLDocument1.

Ai tenho uma função para esse loop

        while Pos('<INFO-SPC-125-DEBITO>', sXML) > 0 do
        begin
          // falar que tá restrito
          cdsSPC.Append;
          cdsSPC.FieldByName('Tip Cred').Text:= RetornaTexto(sXML, '<INFO-SPC-125-TPDEBITO>', '</INFO-SPC-125-TPDEBITO>');
          cdsSPC.FieldByName('Contrato').Text:= RetornaTexto(sXML, '<INFO-SPC-125-CONTRATO>', '</INFO-SPC-125-CONTRATO>');
          cdsSPC.FieldByName('Ocorrência/Disponível').Text:= InvData(RetornaTexto(sXML, '<INFO-SPC-125-OCORRENCIA>', '</INFO-SPC-125-OCORRENCIA>')) +' / '+ InvData(RetornaTexto(sXML, '<INFO-SPC-125-DISPONIVEL>', '</INFO-SPC-125-DISPONIVEL>'));
          cdsSPC.FieldByName('Valor').Text:= RetornaTexto(sXML, '<INFO-SPC-125-TPMOEDA>', '</INFO-SPC-125-TPMOEDA>') +' '+ RetornaTexto(sXML, '<INFO-SPC-125-VALOR>', '</INFO-SPC-125-VALOR>');;
          cdsSPC.FieldByName('Informante').Text:= RetornaTexto(sXML, '<INFO-SPC-125-INFORMANTE>', '</INFO-SPC-125-INFORMANTE>');
          cdsSPC.FieldByName('Cidade - UF').Text:= RetornaTexto(sXML, '<INFO-SPC-125-CIDADE>', '</INFO-SPC-125-CIDADE>');
          cdsSPC.FieldByName('Banco').Text:= 'SCPC';
          RetornaTexto(sXML, '<INFO-SPC-125-DEBITO>', '</INFO-SPC-125-DEBITO>');
        end;

 

A função RetornaTexto recorta da XML completa o valor que está entre as duas tags... e faz a XML ficar menor ... ou seja, sem o texto recortado para que não haja repetição de informação.

Link para o comentário
Compartilhar em outros sites

Qualquer coisa estou por aqui.

a Função segue:

function Tfrm_ConsultaBRBusca.RetornaTexto(Texto, sText1,
  sText2: String): String;
var
  iPos1,iPos2 : Integer;
begin
  try
    begin
    Result:='';

    if (sText1 = '') or (sText2 = '') then Exit;
    if (sText1 = sText2) then Exit;

    iPos1  := PosEx(sText1,Texto);
    iPos2  := PosEx(sText2,Texto);

    Result := Copy(Texto, iPos1 + Length(sText1), iPos2 - (iPos1 + Length(sText1)));

    //ShowMessage(Copy(sXML, iPos1, (iPos2 + Length(sText2) - iPos1)));
    Delete(sXML, iPos1, (iPos2 + Length(sText2) - iPos1));
    end;
  except

  end;

end;

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Sei que a publicação é antiga, mas recentemente realizei a leitura de um xml onde precisei extrai uma informação semelhante.
Trecho do XML:

<?xml version="1.0"?>

-<nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">


-<NFe xmlns="http://www.portalfiscal.inf.br/nfe">


-<infNFe versao="4.00" Id="NFe42180683874628000143550010000860521001211848">

na tag "<infNFe versao" precisei do valor que estava no atributo versão.
foi possível obter essa informação da seguinte forma:
// Variavel X_Versao deve ser variante.
X_Versao :=NodeNFe.ChildNodes.FindNode('infNFe').Attributes['versao'];
 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2120 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...