Jorge Jr Postado Setembro 5, 2017 Denunciar Share Postado Setembro 5, 2017 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> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 5, 2017 Denunciar Share Postado Setembro 5, 2017 esse arquivo xml está no disco local ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 5, 2017 Autor Denunciar Share Postado Setembro 5, 2017 29 minutos atrás, Jhonas disse: esse arquivo xml está no disco local ? Sim amigo, ele fica numa pasta dentro do mesmo diretório. Ele é enviado pelo posto de coleta para o laboratório. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 5, 2017 Denunciar Share Postado Setembro 5, 2017 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 ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 5, 2017 Autor Denunciar Share Postado Setembro 5, 2017 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 5, 2017 Denunciar Share Postado Setembro 5, 2017 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> ^ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 5, 2017 Autor Denunciar Share Postado Setembro 5, 2017 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 5, 2017 Denunciar Share Postado Setembro 5, 2017 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 a data de nascimento com certeza está errada 11/11/1111 aguarde... vou fazer um teste de leitura do xml Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 5, 2017 Autor Denunciar Share Postado Setembro 5, 2017 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 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 5, 2017 Denunciar Share Postado Setembro 5, 2017 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: 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 5, 2017 Autor Denunciar Share Postado Setembro 5, 2017 (editado) Obrigado Jhonas, mais ainda ficou um duvida, como pego os dados da segunda Tag (exames)? Não entendi. OBS: Não precisa repetir o post ... ok ? Editado Setembro 5, 2017 por Jhonas Repetição do Post Desnecessário Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 5, 2017 Denunciar Share Postado Setembro 5, 2017 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); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 5, 2017 Autor Denunciar Share Postado Setembro 5, 2017 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 ======================================================================= Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 5, 2017 Denunciar Share Postado Setembro 5, 2017 isso tem haver com a rotina de leitura do arquivo xml voce consegue descobrir o porque ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 5, 2017 Autor Denunciar Share Postado Setembro 5, 2017 Ainda não Jhonas, to pesquisando. Se eu descobrir posto aqui. Se você achar me avisa por favor. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 6, 2017 Denunciar Share Postado Setembro 6, 2017 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 ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 6, 2017 Autor Denunciar Share Postado Setembro 6, 2017 Amigo valeu mais não entendi. Nada tem como explicar melhor?? To precisando terminar esta aplicativo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 6, 2017 Denunciar Share Postado Setembro 6, 2017 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); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 6, 2017 Autor Denunciar Share Postado Setembro 6, 2017 Amigo muito obrigado, mais preciso de uma solução para isso, passei o dia todo e nada até agora. Sei que você não esta aqui para dar Código para ninguém, mais ficar com xarada fica difícil, o tempo é curto. Vou procurar outra solução, muito obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 6, 2017 Denunciar Share Postado Setembro 6, 2017 amigo, isso não é xarada ... te apontei outro caminho mais prático e basta voce continuar observe que tem muitos membros vendo o seu tópico, mas ninguém para te dar uma outra dica além de mim abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jorge Jr Postado Setembro 6, 2017 Autor Denunciar Share Postado Setembro 6, 2017 Jhonas dá para você fazer o código? Não entendi nada de xmldocument. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 8, 2017 Denunciar Share Postado Setembro 8, 2017 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Jorge Jr
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.
Link para o comentário
Compartilhar em outros sites
21 respostass a esta questão
Posts Recomendados
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.