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

Registrado: Sexta-Feira, 6 de Abril de 2012 Mensagens: 52
|
Enviada: Sex Abr 06, 2012 11:52 am Assunto: [Resolvido] Lendo arquivos XML |
|
|
Olá pessoal, gostaria de saber como eu posso ler um arquivo xml assim:
| Código: | <cadastro>
<pessoas>
<pessoa> <nome>Fernando de Simas</nome> <idade>11</idade></pessoa>
<pessoa> <nome>João Pedro Nunez</nome> <idade>23</idade></pessoa>
</pessoas>
</cadastro> |
Queria que retornasse o Nome, Idade.
Obrigado!
Editado pela última vez por Yien em Sáb Abr 07, 2012 9:58 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Abr 06, 2012 4:49 pm Assunto: |
|
|
Boa tarde
Experimente mais ou menos desta forma:
| Código: | procedure TForm1.Button1Click(Sender: TObject);
var
XMLDoc: IXMLDocument;
NodePessoas: IXMLNode;
i: integer;
begin
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.LoadFromFile('C:\XML\Teste.xml');
NodePessoas := XMLDoc.DocumentElement.ChildNodes.FindNode('pessoas');
if NodePessoas <> nil then
for i := 0 to NodePessoas.ChildNodes.Count - 1 do
if NodePessoas.ChildNodes[i].NodeName = 'pessoa' then
with NodePessoas.ChildNodes[i] do
ShowMessage(ChildNodes['nome'].Text +
sLineBreak +
ChildNodes['idade'].Text);
end; |
obs: é necessário adicionar as units XMLIntf e XMLDoc a clausula uses
Espero que ajude.
Editado pela última vez por imex em Qua Mar 08, 2023 10:23 am, num total de 2 vezes |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sex Abr 06, 2012 5:51 pm Assunto: |
|
|
Retornar isto até que é fácil, mas seu xml não pode ter acento.
Procure por xml aqui no fórum que vc acha...
Outra coisa que é bom vc utilizar é o xmlnotepad para eventuais erros no xml, assim vc descobre erros e fica bem mais fácil construir uma solução a partir daí.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I
Editado pela última vez por johnny-walker em Ter Fev 11, 2020 11:17 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
Yien Novato

Registrado: Sexta-Feira, 6 de Abril de 2012 Mensagens: 52
|
Enviada: Sáb Abr 07, 2012 9:57 am Assunto: |
|
|
imex
Obrigado pela sua ajuda, vou muito util para mim.
Topico resolvido, tag adicionada.
Até a proxima amigos. |
|
| Voltar ao Topo |
|
 |
Wolver Membro Junior

Registrado: Quinta-Feira, 9 de Fevereiro de 2006 Mensagens: 343
|
Enviada: Sex Ago 31, 2012 3:37 pm Assunto: |
|
|
| imex escreveu: | Boa tarde
Experimente mais ou menos desta forma:
| Código: | procedure TForm1.Button1Click(Sender: TObject);
var
XMLDoc: IXMLDocument;
NodePessoas: IXMLNode;
i: integer;
begin
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.LoadFromFile('C:\XML\Teste.xml');
NodePessoas := XMLDoc.DocumentElement.ChildNodes.FindNode('pessoas');
[code] if NodePessoas <> nil then[/code]
for i := 0 to NodePessoas.ChildNodes.Count - 1 do
if NodePessoas.ChildNodes[i].NodeName = 'pessoa' then
with NodePessoas.ChildNodes[i] do
ShowMessage(ChildNodes['nome'].Text +
sLineBreak +
ChildNodes['idade'].Text);
end; |
obs: é necessário adicionar as units XMLIntf e XMLDoc a clausula uses
Espero que ajude.
|
imex,
Estou com um problema e ainda não consegui resolver.
E quando o nodepessoas for igual a nil ...o que quer dizer?O xml está inválido?
| Código: | | if NodePessoas <> nil then |
|
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Ago 31, 2012 3:58 pm Assunto: |
|
|
NodePessoas será igual a nil se o método FindNode não encontrar um nó com o nome passado como parâmetro.
Supondo que o primeiro nó do XML se chama 'pai', que abaixo exista o nó 'filhos', e que abaixo deste o nó 'netos':
| Código: | <pai>
<filhos>
<netos> |
Se você executar
| Código: | NodeFilhos := XMLDoc.DocumentElement.ChildNodes.FindNode('filhos');
NodeNetos := XMLDoc.DocumentElement.ChildNodes.FindNode('netos'); |
NodeFilhos será diferente de nil e NodeNetos igual a nil.
Mas se depois você executar
| Código: | | NodeNetos := NodeFilhos.ChildNodes.FindNode('netos'); |
NodeNetos será diferente de nil.
Espero que ajude. |
|
| Voltar ao Topo |
|
 |
Wolver Membro Junior

Registrado: Quinta-Feira, 9 de Fevereiro de 2006 Mensagens: 343
|
Enviada: Ter Set 11, 2012 9:13 am Assunto: |
|
|
| imex escreveu: | NodePessoas será igual a nil se o método FindNode não encontrar um nó com o nome passado como parâmetro.
Supondo que o primeiro nó do XML se chama 'pai', que abaixo exista o nó 'filhos', e que abaixo deste o nó 'netos':
| Código: | <pai>
<filhos>
<netos> |
Se você executar
| Código: | NodeFilhos := XMLDoc.DocumentElement.ChildNodes.FindNode('filhos');
NodeNetos := XMLDoc.DocumentElement.ChildNodes.FindNode('netos'); |
NodeFilhos será diferente de nil e NodeNetos igual a nil.
Mas se depois você executar
| Código: | | NodeNetos := NodeFilhos.ChildNodes.FindNode('netos'); |
NodeNetos será diferente de nil.
Espero que ajude. |
ok...Ajudou sim! Obrigado! |
|
| Voltar ao Topo |
|
 |
|