String de XML
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.
Mas então, eu quero acessar somente campo nome, mas não sei como...
Alguém pode me dar uma ajuda?
Abraços, Danilo
[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.
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
Curtidas 0
Respostas

Birilo
05/03/2004
Esqueci de uma coisa...
Tipo, a String tá assim
E eu queria acessar aproximadamente assim:
Alguém faz alguma idéia de como fazer isso??
Tipo, a String tá assim
[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:
Caixa.text := xml.nome;
Alguém faz alguma idéia de como fazer isso??
GOSTEI 0

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

Andrey
05/03/2004
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!
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!
GOSTEI 0

Birilo
05/03/2004
OK, estou usando Delphi 7 com o XmlDocument
Mas não estou conseguindo retornar o valor.
Estou fazendo assim:
onde xml é um XmlDocument
Também tentei com
texto.Text := xml.XML.Values[´usuario/nome´];
Mas ainda não deu certo... O Que fazer?
Mas não estou conseguindo retornar o valor.
Estou fazendo assim:
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?
GOSTEI 0

Andrey
05/03/2004
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.
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.
GOSTEI 0

Birilo
05/03/2004
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?
GOSTEI 0

Birilo
05/03/2004
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...
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...
GOSTEI 0

Jasig Aurumalfa
05/03/2004
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:
Espero ter ajudado... :wink:
GOSTEI 0

Zacca
05/03/2004
cara eu uso assimm... eu leh indicaria gravar em um arquivo xml e depois carrega-lo...
precisa de um componente se quiser madna um email rpa mim...
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...
GOSTEI 0