Fórum String de XML #218458

05/03/2004

0

Seguinte gente. Eu usei o TIdHttp para fazer uma conexão à uma página com um servidor PHP. Este servidor responde, retornando uma string em XML. Para ser mais específico, o servidor me retorna isto:

[b:8410845a66][i:8410845a66]
<nome>Danilo Cesar</nome>
<mail>danilo_eu@hotmail.com</mail>
<senha>831caa1b600f852b7844499430ecac17</senha>
<nick>Birilo Nilo</nick>
<cod>0f7f6ab7513432986422eec01fbac9ba</cod>
[/i:8410845a66][/b:8410845a66]

Este resultado eu salvo em uma String fazendo assim.

1
conector:= TIdHttp.get(´http://servidor.com/xml.php?id=4´)


Mas então, eu quero acessar somente campo nome, mas não sei como...
Alguém pode me dar uma ajuda?

Abraços, Danilo


Birilo

Birilo

Responder

Posts

05/03/2004

Birilo

Esqueci de uma coisa...
Tipo, a String tá assim

1
2
3
4
5
6
7
[i][b]<usuario id=´4´>
<nome>Danilo Cesar</nome>
<mail>danilo_eu@hotmail.com</mail>
<senha>831caa1b600f852b7844499430ecac17</senha>
<nick>Birilo Nilo</nick>
<cod>0f7f6ab7513432986422eec01fbac9ba</cod>
</usuario>[/b][/i]


E eu queria acessar aproximadamente assim:

1
Caixa.text := xml.nome;


Alguém faz alguma idéia de como fazer isso??


Responder

Gostei + 0

05/03/2004

Birilo

Esqueci de uma coisa... Tipo, a String tá assim
1
2
3
4
5
6
7
<usuario id=´4´>
<nome>Danilo Cesar</nome>
<mail>danilo_eu@hotmail.com</mail>
<senha>831caa1b600f852b7844499430ecac17</senha>
<nick>Birilo Nilo</nick>
<cod>0f7f6ab7513432986422eec01fbac9ba</cod>
</usuario>
E eu queria acessar aproximadamente assim:
1
Caixa.text := xml.nome;
Alguém faz alguma idéia de como fazer isso??

Ler Mais...




Responder

Gostei + 0

05/03/2004

Andrey

O Delphi 6 e 7 apresentam um componente chamado XMLDocument com o qual vc pode extrair dados de um XML diretamente do arquivo.
Se vc não tiver essas versões do Delphi, acho q vc vai ter q fazer uma rotina pra reconhecer o <nome> e o </nome> e pegar o q tem entre eles!


Responder

Gostei + 0

05/03/2004

Birilo

OK, estou usando Delphi 7 com o XmlDocument

Mas não estou conseguindo retornar o valor.
Estou fazendo assim:

1
texto.Text := xml.XML.Values[´nome´];


onde xml é um XmlDocument

Também tentei com

texto.Text := xml.XML.Values[´usuario/nome´];

Mas ainda não deu certo... O Que fazer?


Responder

Gostei + 0

05/03/2004

Andrey

Bom, antes certifique-se de que a propriedade FileName do XMLDocument esteja apontando para o arquivo XML.
Então dê um active := True e tente:
Texto.Text := XML.DocumentElement.ChildNodes[0].ChildNodes[´nome´].Text

Onde o ChildNodes[0] se refere ao primeiro registro(isso se o seu arquivo XML só tiver este registro) e o ChildNodes[´nome´] se refere ao campo ´nome´ desse registro.


Responder

Gostei + 0

05/03/2004

Birilo

1
2
3
xml.XML.Text := texto.Text;
xml.Active:=true;
nome.Text := xml.DocumentElement.ChildNodes[0].ChildNodes[´mail´].Text;


Mas infelizmente não deu certo....

Eu coloco o codigo xml na richtext texto, copio pra dentro do XmlDocument. Depois eu o ativo.

Dae o resultado do DocumentElement eu jogo pra dentro de um text chamado nome, mas não funciona. Ele fica em branco....

O Que eu estou fazendo de errado?


Responder

Gostei + 0

05/03/2004

Birilo

Ok, consegui...
Já dei um jeito...

Apenas retirei aquele primeiro ChildNode[0], pois tenho apenas um Node...
Também agora estou fazendo com DOMDocument....

Valeu a ajuda....
Brigadão...


Responder

Gostei + 0

06/03/2004

Jasig Aurumalfa

Crie um arquivo, ou um banco de dados, e converta para ele ler a leitura e então é só manipular o arquivo... :D
Espero ter ajudado... :wink:


Responder

Gostei + 0

06/03/2004

Zacca

cara eu uso assimm... eu leh indicaria gravar em um arquivo xml e depois carrega-lo...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
procedure RecebeXML(Sender : tobject);
var
 sr: TSearchRec;
 i:integer;
 n: TxmlNode;
 path1 : string;
begin
 
if FRMPrincipal.ArqIni.ReadString(´Path´,´Amostras´,´´)=´´ then
  path1:=ExtractFilePath(Application.ExeName)+´\Amostras\´
  else
    path1:=FRMPrincipal.ArqIni.ReadString(´Path´,´Amostras\´,´´);
 
if (FindFirst(path1, faAnyFile, sr)=0) then
  begin
    repeat
      Application.ProcessMessages;
      FRMPrincipal.StatusBar1.Panels[3].Text := ´  Recebendo Amostra: ´+sr.Name;
      FRMPrincipal.TXMLPasta.Enabled:=false;
 
      // começa a utilizar o xml para enviar
      Parser := TXMLParser.Create;
      XML    := Parser.LoadFile(path1+´\*.xml´+sr.Name);
 
      n:= XML[´Paciente/Exames´];
      if (Assigned(n)) then
        begin
          for i := 1 to n.ChildrenCount do
            begin
              DMTabelas.TBTempora.Append;
              DMTabelas.TBTempora.FieldByName(´Amostra´).asstring  := XML[´Paciente/Amostra´].value;
              DMTabelas.TBTempora.FieldByName(´Nome´).asstring     := XML[´Paciente/Nome´].value;
              DMTabelas.TBTempora.FieldByName(´Sexo´).asstring     := XML[´Paciente/Sexo´].value;
              DMTabelas.TBTempora.FieldByName(´CodPac´).asstring   := XML[´Paciente/CodPac´].value;
              DMTabelas.TBTempora.FieldByName(´Nasc´).asstring     := XML[´Paciente/Nascimento´].value;
              DMTabelas.TBTempora.FieldByName(´Medico´).asstring   := XML[´Paciente/Medico´].value;
              DMTabelas.TBTempora.FieldByName(´Material´).asstring := XML[´Paciente/Material´].value;
              DMTabelas.TBTempora.FieldByName(´Data´).asstring     := XML[´Paciente/Data´].value;
              DMTabelas.TBTempora.FieldByName(´Hora´).asstring     := XML[´Paciente/Hora´].value;
 
              if (AnsiSameText(n.Child[i].Name, ´Exame´)) then
                begin
                  DMTabelas.TBTempora.FieldByName(´Exame´).asstring    := n.Child[i].Value;
                end;
 
              DMTabelas.TBTempora.Post;
            end;
        end;
 
     copyfile(pchar(path1+sr.name),pchar(ExtractFilePath(Application.ExeName)+´Antigo\´+ExtractFilename(sr.name)),true);
     DeleteFile(path1+ExtractFilename(sr.name));
 
     FRMPrincipal.TXMLPasta.Enabled:=true;
 
    until FindNext(sr)<>0;
 
  end;
end;


precisa de um componente se quiser madna um email rpa mim...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar