| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
DarkProgrammer Novato

Registrado: Terça-Feira, 11 de Setembro de 2012 Mensagens: 33
|
Enviada: Qui Dez 24, 2015 5:46 am Assunto: Ajuda com Leitura de XML |
|
|
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 |
|
 |
DarkProgrammer Novato

Registrado: Terça-Feira, 11 de Setembro de 2012 Mensagens: 33
|
Enviada: Seg Dez 28, 2015 5:41 am Assunto: |
|
|
| Help, Pls; |
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Dez 28, 2015 6:44 am Assunto: |
|
|
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 |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Dez 28, 2015 6:54 am Assunto: |
|
|
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 |
|
 |
DarkProgrammer Novato

Registrado: Terça-Feira, 11 de Setembro de 2012 Mensagens: 33
|
Enviada: Seg Dez 28, 2015 7:12 am Assunto: |
|
|
| 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 |
|
 |
|