Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ler arquivo XML com Delphi Xe


Jorge Jr

Pergunta

Bom dia prezados,

Estou começando usar XML com Delphi e estou precisando ler o arquivo abaixo, mais não tenho nem ideia como fazer, tentei com XMLDocument, só leu o primeiro registro e não leu os nós interno.

Deste já obrigado pela ajuda e atenção.

Abraços.

 

<paciente>
<codnet>LAB6</codnet>
<lab>PO1</lab>
<cpaciente>0000000216</cpaciente>
<codigoint>PO1-0000000216</codigoint>
<dcadastro>02/09/2017</dcadastro>
<horario>14:03</horario>
<cconv>001</cconv>
<dconv>PARTICULAR</dconv>
<nome>ADALGIZA LEITE DE OLIVEIRA</nome>
<sexo>F</sexo>
<datanasc>11/11/1111</datanasc>
<idt/>
<crm>ADELIN</crm>
<nomedico>DR. ADELINO PANIAGO</nomedico>
<senha>SR75XS</senha>
<idade/>
<fone/>
<fone1/>
<preço>59</preço>
<sinal>59</sinal>
<us>59</us>
<desconto>0</desconto>
<acresc>0</acresc>
<saldo>0</saldo>
<matricula/>
<titular/>
<texame>3</texame>
<faturado>N</faturado>
<endereco/>
<bairro/>
<cidade>CRIST</cidade>
<uf>TO</uf>
<cep/>
<internet/>
<pago>SIM</pago>
<medicamentos/>
<diabetico/>
<psa/>
<sus/>
<labpardini/>
<envpardini/>
<exames>
<cpaciente>LAB6002332</cpaciente>
<codigoint>PO1-0000000216</codigoint>
<cexame>COL</cexame>
<descricao>COLESTEROL</descricao>
</exames>
<exames>
<cpaciente>LAB6002332</cpaciente>
<codigoint>PO1-0000000216</codigoint>
<cexame>HDL</cexame>
<descricao>COLESTEROL - HDL</descricao>
</exames>
<exames>
<cpaciente>LAB6002332</cpaciente>
<codigoint>PO1-0000000216</codigoint>
<cexame>TRI</cexame>
<descricao>TRIGLICERIDIOS</descricao>
</exames>
</paciente>
<paciente>
<codnet>LAB6</codnet>
<lab>PO1</lab>
<cpaciente>0000000217</cpaciente>
<codigoint>PO1-0000000217</codigoint>
<dcadastro>02/09/2017</dcadastro>
<horario>14:03</horario>
<cconv>001</cconv>
<dconv>PARTICULAR</dconv>
<nome>ADALTO COELHO BARROS</nome>
<sexo>M</sexo>
<datanasc>19/12/1964</datanasc>
<idt/>
<crm>ALMIR</crm>
<nomedico>DR. ALMIR P. FONSECA</nomedico>
<senha>A6LRR3</senha>
<idade>52 A</idade>
<fone>(063)8415-1642</fone>
<fone1/>
<preço>185</preço>
<sinal>185</sinal>
<us>185</us>
<desconto>0</desconto>
<acresc>0</acresc>
<saldo>0</saldo>
<matricula/>
<titular/>
<texame>3</texame>
<faturado>N</faturado>
<endereco/>
<bairro/>
<cidade>PIUM</cidade>
<uf>TO</uf>
<cep/>
<internet/>
<pago>SIM</pago>
<medicamentos/>
<diabetico/>
<psa/>
<sus/>
<labpardini>SIM</labpardini>
<envpardini/>
<exames>
<cpaciente>LAB6000171</cpaciente>
<codigoint>PO1-0000000217</codigoint>
<cexame>E2</cexame>
<descricao>E2 - ESTRADIOL</descricao>
</exames>
<exames>
<cpaciente>LAB6000171</cpaciente>
<codigoint>PO1-0000000217</codigoint>
<cexame>T4</cexame>
<descricao>T4 - TIROXINA</descricao>
</exames>
<exames>
<cpaciente>LAB6000171</cpaciente>
<codigoint>PO1-0000000217</codigoint>
<cexame>TRI</cexame>
<descricao>TRIGLICERIDIOS</descricao>
</exames>
</paciente>

 

Link para o comentário
Compartilhar em outros sites

21 respostass a esta questão

Posts Recomendados

  • 0
22 minutos atrás, Jhonas disse:

ok... voce vai armazenar os dados do xml em um banco de dados ?

se sim qual  ?   já tem a tabela criada com todos os campos do xml ?

vai mostrar os dados em um form ou num relatório ?

Sim Jhonas, vou gravar em um banco de dados Firebird, onde a Tag Paciente vai para a tabela Paciente e a Tag Exames para tabela Exames. As duas tabelas tem os mesmos campos que o XML.

Não vou mostrar só importar para as tabelas.

Link para o comentário
Compartilhar em outros sites

  • 0

me passa o arquivo correto do xml, para eu fazer alguns testes

nesse tem erro

XML Parsing Error: not well-formed
Line Number 20, Column 5:<preo>59</pre�o>
----^

XML Parsing Error: junk after document element
Line Number 62, Column 1:<paciente>
^

Link para o comentário
Compartilhar em outros sites

  • 0
44 minutos atrás, Jhonas disse:

me passa o arquivo correto do xml, para eu fazer alguns testes

nesse tem erro

XML Parsing Error: not well-formed
Line Number 20, Column 5:<preo>59</pre�o>
----^

XML Parsing Error: junk after document element
Line Number 62, Column 1:<paciente>
^

Jhonas, segue o arquivo XML
 

<registro>
<id>2017</id>
<data>04/09/2017</data>
<hora>21:29:08</hora>
<posto>PO1</posto>
<paciente>
<codnet>LAB6</codnet>
<lab>PO1</lab>
<cpaciente>0000000216</cpaciente>
<codigoint>PO1-0000000216</codigoint>
<dcadastro>02/09/2017</dcadastro>
<horario>14:03</horario>
<cconv>001</cconv>
<dconv>PARTICULAR</dconv>
<nome>ADALGIZA LEITE DE OLIVEIRA</nome>
<sexo>F</sexo>
<datanasc>11/11/1111</datanasc>
<idt/>
<crm>ADELIN</crm>
<nomedico>DR. ADELINO PANIAGO</nomedico>
<senha>SR75XS</senha>
<idade/>
<fone/>
<fone1/>
<preço>59</preço>
<sinal>59</sinal>
<us>59</us>
<desconto>0</desconto>
<acresc>0</acresc>
<saldo>0</saldo>
<matricula/>
<titular/>
<texame>3</texame>
<faturado>N</faturado>
<endereco/>
<bairro/>
<cidade>CRIST</cidade>
<uf>TO</uf>
<cep/>
<internet/>
<pago>SIM</pago>
<medicamentos/>
<diabetico/>
<psa/>
<sus/>
<labpardini/>
<envpardini/>
<exames>
<cpaciente>LAB6002332</cpaciente>
<codigoint>PO1-0000000216</codigoint>
<cexame>COL</cexame>
<descricao>COLESTEROL</descricao>
</exames>
<exames>
<cpaciente>LAB6002332</cpaciente>
<codigoint>PO1-0000000216</codigoint>
<cexame>HDL</cexame>
<descricao>COLESTEROL - HDL</descricao>
</exames>
<exames>
<cpaciente>LAB6002332</cpaciente>
<codigoint>PO1-0000000216</codigoint>
<cexame>TRI</cexame>
<descricao>TRIGLICERIDIOS</descricao>
</exames>
</paciente>
<paciente>
<codnet>LAB6</codnet>
<lab>PO1</lab>
<cpaciente>0000000217</cpaciente>
<codigoint>PO1-0000000217</codigoint>
<dcadastro>02/09/2017</dcadastro>
<horario>14:03</horario>
<cconv>001</cconv>
<dconv>PARTICULAR</dconv>
<nome>ADALTO COELHO BARROS</nome>
<sexo>M</sexo>
<datanasc>19/12/1964</datanasc>
<idt/>
<crm>ALMIR</crm>
<nomedico>DR. ALMIR P. FONSECA</nomedico>
<senha>A6LRR3</senha>
<idade>52 A</idade>
<fone>(063)8415-1642</fone>
<fone1/>
<preço>185</preço>
<sinal>185</sinal>
<us>185</us>
<desconto>0</desconto>
<acresc>0</acresc>
<saldo>0</saldo>
<matricula/>
<titular/>
<texame>3</texame>
<faturado>N</faturado>
<endereco/>
<bairro/>
<cidade>PIUM</cidade>
<uf>TO</uf>
<cep/>
<internet/>
<pago>SIM</pago>
<medicamentos/>
<diabetico/>
<psa/>
<sus/>
<labpardini>SIM</labpardini>
<envpardini/>
<exames>
<cpaciente>LAB6000171</cpaciente>
<codigoint>PO1-0000000217</codigoint>
<cexame>E2</cexame>
<descricao>E2 - ESTRADIOL</descricao>
</exames>
<exames>
<cpaciente>LAB6000171</cpaciente>
<codigoint>PO1-0000000217</codigoint>
<cexame>T4</cexame>
<descricao>T4 - TIROXINA</descricao>
</exames>
<exames>
<cpaciente>LAB6000171</cpaciente>
<codigoint>PO1-0000000217</codigoint>
<cexame>TRI</cexame>
<descricao>TRIGLICERIDIOS</descricao>
</exames>
</paciente>
<paciente>
<codnet>LAB6</codnet>
<lab>CT</lab>
<cpaciente>0000008553</cpaciente>
<codigoint>CT-0000008553</codigoint>
<dcadastro>01/09/2017</dcadastro>
<horario>16:54</horario>
<cconv>001</cconv>
<dconv>PARTICULAR</dconv>
<nome>ADRIANA ALVES DE SOUZA</nome>
<sexo>F</sexo>
<datanasc>15/06/1997</datanasc>
<idt/>
<crm>ADELMO</crm>
<nomedico>DR. ADELMO AIRES NEGRE</nomedico>
<senha>4VJP4N</senha>
<idade>20 A</idade>
<fone/>
<fone1/>
<preço>113</preço>
<sinal>113</sinal>
<us>113</us>
<desconto>0</desconto>
<acresc>0</acresc>
<saldo>0</saldo>
<matricula/>
<titular/>
<texame>3</texame>
<faturado>N</faturado>
<endereco/>
<bairro/>
<cidade>NR</cidade>
<uf>TO</uf>
<cep/>
<internet/>
<pago>SIM</pago>
<medicamentos/>
<diabetico/>
<psa/>
<sus/>
<labpardini>SIM</labpardini>
<envpardini/>
<exames>
<cpaciente>LAB6005059</cpaciente>
<codigoint>CT-0000008553</codigoint>
<cexame>CRE</cexame>
<descricao>CREATININA</descricao>
</exames>
<exames>
<cpaciente>LAB6005059</cpaciente>
<codigoint>CT-0000008553</codigoint>
<cexame>TSH</cexame>
<descricao>TSH - HORMONIO TIREOESTIMULANTE</descricao>
</exames>
<exames>
<cpaciente>LAB6005059</cpaciente>
<codigoint>CT-0000008553</codigoint>
<cexame>URE</cexame>
<descricao>UREIA</descricao>
</exames>
</paciente>
<paciente>
<codnet>LAB6</codnet>
<lab>CT</lab>
<cpaciente>0000008554</cpaciente>
<codigoint>CT-0000008554</codigoint>
<dcadastro>01/09/2017</dcadastro>
<horario>17:08</horario>
<cconv>001</cconv>
<dconv>PARTICULAR</dconv>
<nome>LANNA EDUARDA FERREIRA MOISES</nome>
<sexo>F</sexo>
<datanasc>27/10/2003</datanasc>
<idt/>
<crm>ADILIO</crm>
<nomedico>DR. ADILIO ALMEIDA</nomedico>
<senha>LFRHCT</senha>
<idade>13 A</idade>
<fone/>
<fone1/>
<preço>264</preço>
<sinal>264</sinal>
<us>264</us>
<desconto>0</desconto>
<acresc>0</acresc>
<saldo>0</saldo>
<matricula/>
<titular/>
<texame>4</texame>
<faturado>N</faturado>
<endereco/>
<bairro/>
<cidade>NR</cidade>
<uf>TO</uf>
<cep/>
<internet/>
<pago>SIM</pago>
<medicamentos/>
<diabetico/>
<psa/>
<sus/>
<labpardini>SIM</labpardini>
<envpardini/>
<exames>
<cpaciente>LAB6003256</cpaciente>
<codigoint>CT-0000008554</codigoint>
<cexame>E2</cexame>
<descricao>E2 - ESTRADIOL</descricao>
</exames>
<exames>
<cpaciente>LAB6003256</cpaciente>
<codigoint>CT-0000008554</codigoint>
<cexame>GLI</cexame>
<descricao>GLICEMIA</descricao>
</exames>
<exames>
<cpaciente>LAB6003256</cpaciente>
<codigoint>CT-0000008554</codigoint>
<cexame>LH</cexame>
<descricao>LH - HORMONIO LUTEINIZANTE</descricao>
</exames>
<exames>
<cpaciente>LAB6003256</cpaciente>
<codigoint>CT-0000008554</codigoint>
<cexame>TSH</cexame>
<descricao>TSH - HORMONIO TIREOESTIMULANTE</descricao>
</exames>
</paciente>
<paciente>
<codnet>L105</codnet>
<lab>CT</lab>
<cpaciente>0000008555</cpaciente>
<codigoint>CT-0000008555</codigoint>
<dcadastro>01/09/2017</dcadastro>
<horario>17:19</horario>
<cconv>001</cconv>
<dconv>PARTICULAR</dconv>
<nome>MAYARA CAROLINE</nome>
<sexo>F</sexo>
<datanasc>12/07/1991</datanasc>
<idt/>
<crm>ADELIN</crm>
<nomedico>DR. ADELINO PANIAGO</nomedico>
<senha>IA7KA6</senha>
<idade>26 A</idade>
<fone/>
<fone1/>
<preço>294</preço>
<sinal>294</sinal>
<us>294</us>
<desconto>0</desconto>
<acresc>0</acresc>
<saldo>0</saldo>
<matricula/>
<titular/>
<texame>6</texame>
<faturado>N</faturado>
<endereco/>
<bairro/>
<cidade/>
<uf/>
<cep/>
<internet/>
<pago>SIM</pago>
<medicamentos/>
<diabetico/>
<psa/>
<sus/>
<labpardini>SIM</labpardini>
<envpardini/>
<exames>
<cpaciente>L105000062</cpaciente>
<codigoint>CT-0000008555</codigoint>
<cexame>COL</cexame>
<descricao>COLESTEROL</descricao>
</exames>
<exames>
<cpaciente>L105000062</cpaciente>
<codigoint>CT-0000008555</codigoint>
<cexame>E2</cexame>
<descricao>E2 - ESTRADIOL</descricao>
</exames>
<exames>
<cpaciente>L105000062</cpaciente>
<codigoint>CT-0000008555</codigoint>
<cexame>HC</cexame>
<descricao>HEMOGRAMA COMPLETO</descricao>
</exames>
<exames>
<cpaciente>L105000062</cpaciente>
<codigoint>CT-0000008555</codigoint>
<cexame>LH</cexame>
<descricao>LH - HORMONIO LUTEINIZANTE</descricao>
</exames>
<exames>
<cpaciente>L105000062</cpaciente>
<codigoint>CT-0000008555</codigoint>
<cexame>T4</cexame>
<descricao>T4 - TIROXINA</descricao>
</exames>
<exames>
<cpaciente>L105000062</cpaciente>
<codigoint>CT-0000008555</codigoint>
<cexame>TRI</cexame>
<descricao>TRIGLICERIDIOS</descricao>
</exames>
</paciente>
</registro>

 

 

16 minutos atrás, Jorge Jr disse:
</registro>

Jhonas não sei por que mais o forum eu coloco preço ele transforma para PREÇO.  Não sei o motivo mais tá trocado o C pelo Ç no XML e no banco esta com C. 

Link para o comentário
Compartilhar em outros sites

  • 0

ok ...  verifiquei isso tambem

então vamos começar.... o arquivo xml pode ser observado pelo navegador da internet

se ele estiver correto, voce vai ver isso

XML.JPG

a data de nascimento com certeza está errada 11/11/1111

aguarde... vou fazer um teste de leitura do xml

 

Link para o comentário
Compartilhar em outros sites

  • 0
30 minutos atrás, Jhonas disse:

ok ...  verifiquei isso tambem

então vamos começar.... o arquivo xml pode ser observado pelo navegador da internet

se ele estiver correto, voce vai ver isso

XML.JPG

a data de nascimento com certeza está errada 11/11/1111

aguarde... vou fazer um teste de leitura do xml

 

Ok, datanasc tá errada mesmo, o cliente digita qualquer coisa.

Link para o comentário
Compartilhar em outros sites

  • 0

Estou começando usar XML com Delphi e estou precisando ler o arquivo abaixo, mais não tenho nem ideia como fazer, tentei com XMLDocument, só leu o primeiro registro e não leu os nós interno.

ok..como voce não tem ideia como fazer, vou começar bem basico para voce poder entender

primeiro o que é XML ?

https://www.tecmundo.com.br/programacao/1762-o-que-e-xml-.htm

XML – Introdução e conceitos básicos

http://www.macoratti.net/xml.htm

ok...  depois dessa leitura ( se é que foi necessário a leitura ) vamos para a pratica

no seu caso ( usando o seu xml ) montei um programa simples para a leitura do xml e como obter o resultado dos dados

unit ULerXML;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls, Grids, DBGrids, DB,
  DBTables, DBClient, Provider;

type
  TForm1 = class(TForm)
    Button1: TButton;
    XMLDocument1: TXMLDocument;
    OpenDialog1: TOpenDialog;
    ListBox1: TListBox;
    procedure LoadXML;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.LoadXML;
Var
  I : Integer;
begin
  ListBox1.Clear;
  for I := 0 to XMLDocument1.DocumentElement.ChildNodes.Count - 1 do
  begin
        ListBox1.Items.Add('id = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['id'].Text);
        ListBox1.Items.Add('data = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['data'].Text);
        ListBox1.Items.Add('hora = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['hora'].Text);
        ListBox1.Items.Add('posto = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['posto'].Text);

        ListBox1.Items.Add('codnet = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['codnet'].Text);
        ListBox1.Items.Add('lab = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['lab'].Text);
        ListBox1.Items.Add('cpaciente = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['cpaciente'].Text);
        ListBox1.Items.Add('codigoint = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['codigoint'].Text);
        ListBox1.Items.Add('dcadastro = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['dcadastro'].Text);
        ListBox1.Items.Add('horario = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['horario'].Text);
        ListBox1.Items.Add('cconv = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['cconv'].Text);
        ListBox1.Items.Add('dconv = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['dconv'].Text);
        ListBox1.Items.Add('nome = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['nome'].Text);
        ListBox1.Items.Add('sexo = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['sexo'].Text);
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    XMLDocument1.FileName := OpenDialog1.FileName;
    XMLDocument1.Active := True;
    LoadXML;
  end;
end;

end.

Resultado:

XML.JPG

entretanto como voce pode observar, dessa forma, voce obteria os dados mas seria bem trabalhoso

existem muitas outras maneiras de se trabalhar com o componente XMLDocument1

outra maneira seria manipular o XML através de um componente ClientDataset ( Banco de dados )

http://edn.embarcadero.com/de/article/37321

mais exemplos:

http://www.devmedia.com.br/importando-xml-com-o-xmldocument-delphi/24288

http://www.devmedia.com.br/como-ler-xml-em-delphi/17881

http://www.activedelphi.com.br/forum/viewtopic.php?t=54881&sid=7e65ac716f357cdd2cc925e3775f3739

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

se a tag exames é um sub nó de paciente, voce deve incluir esse sub nó

        ListBox1.Items.Add('cpaciente = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['exames'].ChildNodes['cpaciente'].Text);
        ListBox1.Items.Add('codigoint = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['exames'].ChildNodes['codigoint'].Text);
        ListBox1.Items.Add('cexame = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['exames'].ChildNodes['cexame'].Text);
        ListBox1.Items.Add('descricao = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['exames'].ChildNodes['descricao'].Text);

 

XML.JPG

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, não ta dando certo não. Fiz isso o que você falou, mais o segundo nó só repete o primeiro exame do primeiro paciente.

codnet = LAB6
lab = PO1
cpaciente = 0000000216
codigoint = PO1-0000000216
dcadastro = 02/09/2017
horario = 14:03
cconv = 001
dconv = PARTICULAR
nome = ADALGIZA LEITE DE OLIVEIRA
sexo = F
-----------------------------------------------------------------------
cexame = COL
descricao = COLESTEROL
=======================================================================
codnet = LAB6
lab = PO1
cpaciente = 0000000216
codigoint = PO1-0000000216
dcadastro = 02/09/2017
horario = 14:03
cconv = 001
dconv = PARTICULAR
nome = ADALGIZA LEITE DE OLIVEIRA
sexo = F
-----------------------------------------------------------------------
cexame = COL
descricao = COLESTEROL
=======================================================================
codnet = LAB6
lab = PO1
cpaciente = 0000000216
codigoint = PO1-0000000216
dcadastro = 02/09/2017
horario = 14:03
cconv = 001
dconv = PARTICULAR
nome = ADALGIZA LEITE DE OLIVEIRA
sexo = F
-----------------------------------------------------------------------
cexame = COL
descricao = COLESTEROL
=======================================================================
 

Link para o comentário
Compartilhar em outros sites

  • 0

não é isso ... a pergunta eu fiz para que voce diga o porque está repetindo os valores.

quando eu disse: isso tem haver com a rotina de leitura do arquivo xml 

era para voce olhar o código, e tentar descobrir o motivo ...rs 

vou clarear as ideias ....
 

for I := 0 to XMLDocument1.DocumentElement.ChildNodes.Count - 1 do begin

ListBox1.Items.Add('id = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['id'].Text);

ListBox1.Items.Add('codnet = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['codnet'].Text);

ListBox1.Items.Add('cpaciente = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['paciente'].ChildNodes['exames'].ChildNodes['cpaciente'].Text);

end;

- registro

      - paciente

              - exames

temos 3 Tags, mas só fizemos a leitura da primeira ocorrencia  e não repetimos a leitura para os proximos nodos filhos ( ChildNodes ).

como eu disse, essa é a maneira mais tabalhosa de se fazer. mas fiz assim para voce aprender o conceito por traz do XML

agora imagine que cada ChildNode tenha um indice ao invés de um nome .. como ficaria ?

Link para o comentário
Compartilhar em outros sites

  • 0

aquele código poderia ser substituido por esse

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls, Grids, DBGrids, DB,
  DBTables, DBClient, Provider;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    XMLDocument1: TXMLDocument;
    OpenDialog1: TOpenDialog;
    procedure LoadXML;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.LoadXML;
Var
  I : Integer;
  tag, atributo : string;
begin
  ListBox1.Clear;
  for I := 0 to XMLDocument1.DocumentElement.ChildNodes.Count - 1 do
  begin
     tag := ( XMLDocument1.DocumentElement.ChildNodes[i].NodeName);
     if tag = 'paciente' then exit;
     atributo := ( XMLDocument1.DocumentElement.ChildNodes[i].text);
     ListBox1.Items.Add(tag + ' = ' + atributo);

  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    XMLDocument1.FileName := OpenDialog1.FileName;
    XMLDocument1.Active := True;
    LoadXML;
  end;
end;

end.

montei somente uma parte para voce fazer uma correlação com o anterior, onde a palavra registro recebe um indice. e onde a variavel TAG recebe o nome do campo e a varavel Atributo recebe o ( conteudo ) valor do campo

ListBox1.Items.Add('id = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['id'].Text);
ListBox1.Items.Add('data = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['data'].Text);
ListBox1.Items.Add('hora = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['hora'].Text);
ListBox1.Items.Add('posto = '+ XMLDocument1.ChildNodes['registro'].ChildNodes['posto'].Text);
Link para o comentário
Compartilhar em outros sites

  • 0

coloquei nesse código somente o nó "paciente"

se voce entendeu o conceito do xml, vai conseguir fazer o resto

procedure TForm1.Button1Click(Sender: TObject);
var
 OuterRoot,EntryNode:IXmlNode;
 i,x:Integer;
begin
   ListBox1.Clear;
   XMLDocument1.LoadFromFile('c:\consulta.xml'); // seu arquivo xml
   XMLDocument1.Active := True;
   OuterRoot := xmldocument1.DocumentElement;

   for i := 0 to OuterRoot.ChildNodes.count -1 do
     begin
       EntryNode := OuterRoot.ChildNodes[i];

       if OuterRoot.ChildNodes[i].NodeName='paciente' then
         begin
           ListBox1.Items.Add(StringOfChar('-',50));
           ListBox1.Items.Add(OuterRoot.ChildNodes[i].NodeName +':');

           for x := 0 to EntryNode.ChildNodes.Count -1 do
             ListBox1.Items.Add( EntryNode.ChildNodes[x].NodeName + '  =  '  + EntryNode.ChildNodes[x].Text);

         end;
     end;
end;

 

XML1.JPG

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...