Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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.

  • 7 meses depois ...
Postado

Li sim!

Mas tive que fazer recortes na string! foi trabalhoso, mas consegui pegar todos os itens!

Na verdade, eu faço uma busca por uma palavra que contem na linha e a partir dali eu leio a quantidade de carateres que preciso!

  • Curtir 1
Postado (editado)

Resumindo, é na unha a leitura kkkkkkk

E quando tem vários registros de cheques e registros de empresas, como vc tratou o loop?

Editado por armando.boza

Londrina - PR

Postado

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.

Postado

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
  • Este tópico foi criado há 2788 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.