ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ajuda com Leitura de XML

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
DarkProgrammer
Novato
Novato


Registrado: Terça-Feira, 11 de Setembro de 2012
Mensagens: 33

MensagemEnviada: Qui Dez 24, 2015 5:46 am    Assunto: Ajuda com Leitura de XML Responder com Citação

Olá a todos, estou precisando da ajuda de vocês para terminar de fazer um code para ler um arquivo XML, abaixo postarei como ele está.

Código:
vXMLDoc := TXMLDocument.Create(self);
  vXMLDoc.FileName := 'urlhttp';
  vXMLDoc.Active := True;
  Tópicos:= vXMLDoc.DocumentElement.childNodes.First.ChildNodes.FindNode('Topicos');

  if (Tópicos <> nil) then
  begin
    redt1.Lines.Add(Tópicos.ChildNodes['id1'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id2'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id3'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id4'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id5'].Text);
  end;


Até ai tudo bem ele lista tudo, porém no meu XML existe várias tags <Topicos>, e ele só está pegando os valores da primeira. Segue abaixo a estrutura do XML.

Código:

<xml>
<Global>
   <ForumGlobal>
      <qtRows>3</qtRows>
      <Topicos>
         <id1>Primeiro Campo</id1>
         <id2>Segundo Campo</id2>
         <id3>Terceiro Campo</id3>
         <id4>Quarto Campo</id4>
         <id5>Quinto Campo</id5>
]]></first_post>
      </Topicos>
      <Topicos>
         <id1>Primeiro Campo</id1>
         <id2>Segundo Campo</id2>
         <id3>Terceiro Campo</id3>
         <id4>Quarto Campo</id4>
         <id5>Quinto Campo</id5>
]]></first_post>
      </Topicos>
      <Topicos>
         <id1>Primeiro Campo</id1>
         <id2>Segundo Campo</id2>
         <id3>Terceiro Campo</id3>
         <id4>Quarto Campo</id4>
         <id5>Quinto Campo</id5>
]]></first_post>
      </Topicos>
   </ForumGlobal>
</Global>

se alguém puder me ajudar a pegar os dados de todas as tags <Topicos> ficarei muito grato.
Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
DarkProgrammer
Novato
Novato


Registrado: Terça-Feira, 11 de Setembro de 2012
Mensagens: 33

MensagemEnviada: Seg Dez 28, 2015 5:41 am    Assunto: Responder com Citação

Help, Pls;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Seg Dez 28, 2015 6:44 am    Assunto: Responder com Citação

vais precisar de um loop pois o comando:

Código:
Tópicos:= vXMLDoc.DocumentElement.childNodes.First.ChildNodes.FindNode('Topicos');


só pega o primeiro mesmo ( First = primeiro )

assim precisa ir correndo os topicos um a um com algum comando do tipo next até que não achar mais topicos a ser listado.
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Seg Dez 28, 2015 6:54 am    Assunto: Responder com Citação

tente algo do tipo:

Código:
  vXMLDoc := TXMLDocument.Create(self);
  vXMLDoc.FileName := 'urlhttp';
  vXMLDoc.Active := True;
  Tópicos:= vXMLDoc.DocumentElement.childNodes.First.ChildNodes.FindNode('Topicos');

  while not (Tópicos = Nil) do
  begin
    redt1.Lines.Add(Tópicos.ChildNodes['id1'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id2'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id3'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id4'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id5'].Text);
    Tópicos := Tópicos.NextSibling;
  end;

_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
DarkProgrammer
Novato
Novato


Registrado: Terça-Feira, 11 de Setembro de 2012
Mensagens: 33

MensagemEnviada: Seg Dez 28, 2015 7:12 am    Assunto: Responder com Citação

strak2012 escreveu:
tente algo do tipo:

Código:
  vXMLDoc := TXMLDocument.Create(self);
  vXMLDoc.FileName := 'urlhttp';
  vXMLDoc.Active := True;
  Tópicos:= vXMLDoc.DocumentElement.childNodes.First.ChildNodes.FindNode('Topicos');

  while not (Tópicos = Nil) do
  begin
    redt1.Lines.Add(Tópicos.ChildNodes['id1'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id2'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id3'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id4'].Text);
    redt1.Lines.Add(Tópicos.ChildNodes['id5'].Text);
    Tópicos := Tópicos.NextSibling;
  end;


Funcionou perfeitamente, muito obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB