Criando XML

225 views
Skip to first unread message

Jackson [ Condata Informática ]

unread,
Sep 10, 2009, 7:00:53 PM9/10/09
to dug...@googlegroups.com

   E ai pessoal,
 
estou utilizando o XMLTransformProvider para lêr um XML num padrão próprio...
porem estou tentando gravar.
estou tentando
ClientDataSet.ApplyUpdates;
 
mas quando eu abro o XML aparece a conf. do datapacket
<?xml version="1.0" ?>
- <DATAPACKET Version="2.0">
- <METADATA>
- <FIELDS>
  <FIELD attrname="VERSAO" fieldtype="string" WIDTH="3" />
  <FIELD attrname="DATA" fieldtype="string" WIDTH="10" />
  <FIELD attrname="HORA" fieldtype="string" WIDTH="5" />
- <FIELD attrname="CLIENTE" fieldtype="nested">
- <FIELDS>  E por ai vai...

Alguem poderia me dar uma ajuda nisso??? 

Jackson de Fraga
Desenvolvedor de Sistemas

Condata Informática LTDA

jac...@condatars.com.br

http://www.condatars.com.br/

(51) 3368-2022 / 3368-2126

Av. Assis Brasil, 6203 SALA 402
Bairro Sarandi - Porto Alegre - RS


AVISO LEGAL

"Esta mensagem é destinada exclusivamente para a(s) pessoa(s) a quem é dirigida, podendo conter informação confidencial e/ou legalmente privilegiada. Se você não for destinatário desta mensagem, desde já fica notificado de abster-se a divulgar, copiar, distribuir, examinar ou, de qualquer forma, utilizar a informação contida nesta mensagem, por ser ilegal. Caso você tenha recebido esta mensagem por engano, pedimos que nos retorne este e-mail, promovendo, desde logo, a eliminação do seu conteúdo em sua base de dados, registros ou sistema de controle. Fica desprovida de eficácia e validade a mensagem que contiver vínculos obrigacionais, expedida por quem não detenha poderes de representação."

LEGAL ADVICE

"This message is exclusively destined for the people to whom it is directed, and it can bear private and/or legally exceptional information. If you are not addressee of this message, since now you are advised to not release, copy, distribute, check or, otherwise, use the information contained in this message, because it is illegal. If you received this message by mistake, we ask you to return this email, making possible, as soon as possible, the elimination of its contents of your database, registrations or controls system. The message that bears any mandatory links, issued by someone who has no representation powers, shall be null or void."

Antes de imprimir pense em seu compromisso com o Meio Ambiente
header.jpg
meioambiente.jpg

Newton Michel de Oliveira

unread,
Sep 10, 2009, 7:33:56 PM9/10/09
to dug...@googlegroups.com
porque você não usa o TXMLDOCUMENT? o que você realmente quer fazer?


Newton Michel de Oliveira www.nmooliveira.com.br
Mobile 55 51 92358577
Consultor de TI
Embarcadero Delphi 2009 Programming

Public Profile
http://www.linkedin.com/in/newtongaucho




2009/9/10 Jackson [ Condata Informática ] <jac...@condatars.com.br>

Diego Campos Rosa

unread,
Sep 10, 2009, 8:15:24 PM9/10/09
to dug...@googlegroups.com
Jackson

Acredito que so deve estar faltando o comando ClientDataSet.Post antes do ClientDataSet.ApplyUpdates


Atenciosamente,
Diego Campos Rosa diego.ca...@gmail.com
Mobile 55 51 84597563
Consultor na Aquasoft Tecnologia da Informação
Fone +55 51 3022-3188 - Porto Alegre/RS - Brasil
CodeGear™ Delphi® 2007

Public Profile
http://www.linkedin.com/in/diegocamposrosa82


2009/9/10 Jackson [ Condata Informática ] <jac...@condatars.com.br>

Samuel

unread,
Sep 11, 2009, 7:32:26 AM9/11/09
to dug...@googlegroups.com
Bom dia Jackson,

Eu precisei colocar uma rotina de importação no meu sistema que, entre vários formatos de arquivos, também teria que ler e importar aquivos XML diretamente no banco de dados.

Como isso iria demandar muito tempo, acabamos optando por adquirir uma VCL específica para isso (Advanced Data Import). Tivemos que investir na VCL algo perto de R$ 350,00 porém foi mais econômico do que gastar alguns dias tentando desenvolver e testar uma rotina para fazer isso.

Se quiser conhecer o produto, o link com maiores informações do produto é http://www.sqlmanager.net.br/html/dataimport_vcl.html (com opção para download de uma versão de testes).

Abraços,

Samuel

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 9:17:28 AM9/11/09
to dug...@googlegroups.com
Bah cara... nunca useu XMLDocument, nem sei como fazer...
 
eu tenho uma estrutura semelhante a isso...
note q tenho um elemento raiz root (XML)...
um elemento unico (VERS)
um elemento multiplo (CLIENTE) e (PEDIDO)
 
<XML>
  <VERS><VER>1.0</VER><DATA>01/01/2001</DATA><VERS>
  <CLIENTE>
    <CODCLI>1</CODCLI>
    <NOME>FULANO</NOME>
    <CNPJ>99.999.999/0001-99</CNPJ>
    <FONE>9999-9999</FONE>
  <CLIENTE>
  <CLIENTE>
    <CODCLI>2</CODCLI>
    <NOME>BELTRANO</NOME>
    <CNPJ>88.999.999/0001-99</CNPJ>
    <FONE>8888-9999</FONE>
  <CLIENTE>
  <CLIENTE>
    <CODCLI>3</CODCLI>
    <NOME>CICLANO</NOME>
    <CNPJ>99.999.7777/0001-99</CNPJ>
    <FONE>9999-7777</FONE>
  <CLIENTE>
  <PEDIDO>
     <CODCLI>3</CODCLI>
     <TOTAL>200,00</TOTAL>
  </PEDIDO>
<XML>

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 9:18:06 AM9/11/09
to dug...@googlegroups.com
não... eu faço exatamento
 
post;
applyUpdates;
----- Original Message -----
Sent: Thursday, September 10, 2009 9:15 PM
Subject: [dug-rs] Re: Criando XML

Diego Campos Rosa

unread,
Sep 11, 2009, 9:22:13 AM9/11/09
to dug...@googlegroups.com
Cara,

Esplica um pouco mais para qual finalidade você quer usar este XML.
Talvez possa fazer um Demo pra você entender como funciona... o XMLDocument ou ClientDataSet



Atenciosamente,
Diego Campos Rosa diego.ca...@gmail.com
Mobile 55 51 84597563
Consultor na Aquasoft Tecnologia da Informação
Fone +55 51 3022-3188 - Porto Alegre/RS - Brasil
CodeGear™ Delphi® 2007

Public Profile
http://www.linkedin.com/in/diegocamposrosa82


2009/9/11 Jackson [ Condata Informática ] <jac...@condatars.com.br>

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 9:23:39 AM9/11/09
to dug...@googlegroups.com
eu tenho q gravar na mesma estrutura enviada anteriomente...
----- Original Message -----

Newton Michel de Oliveira

unread,
Sep 11, 2009, 9:45:52 AM9/11/09
to dug...@googlegroups.com
tche,
   o TXMLDOCUMENT funciona mais ou menos assim:


procedure TForm1.LeXML();
var
   oXML:TXMLDOCUMENT;
   nodeVERS:IXMLNode;
   versao:string;
begin
   //Carrega o XML
   oXML     := TXMLDOCUMENT.Create( 'demo.xml');

   // Le o Node VERS
   nodeVERS := oXML.DocumentElement.ChildNodes.FindNode('VERS');

   //LE O VALOR DO NODE
   versao := nodeVERS.ChildNodes['VER'].Text;

   oXML.Free;

end;

procedure TForm1.SalvaXML();
var
   oXML:IXMLDOCUMENT;
   nodeVERS:IXMLNode;
   versao:string;
begin
   //Carrega o XML
   oXML        := TXMLDOCUMENT.Create( nil );
   oXML.Active := true;

   // Adiciona o node
   nodeVERS := oXML.DocumentElement.AddChild('VERS');
   nodeVERS.AttributeNodes.Add('VER') := '1.0';

   oXML := nil;

end;



Newton Michel de Oliveira www.nmooliveira.com.br
Mobile 55 51 92358577
Consultor de TI
Embarcadero Delphi 2009 Programming

Public Profile
http://www.linkedin.com/in/newtongaucho




2009/9/11 Diego Campos Rosa <diego.ca...@gmail.com>

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 9:59:13 AM9/11/09
to dug...@googlegroups.com
como ficaria os elementos <CLIENTE>

Newton Michel de Oliveira

unread,
Sep 11, 2009, 10:06:55 AM9/11/09
to dug...@googlegroups.com
igual ao VERS, foi so um exemplo do primento elemento, para os restantes é so copiar e correr pro abraço... a unica coisa que você teria que testar é para ver se o findnode não retornou nil, porque se ele retornar nil é sinal que o node não foi encontrado.




Newton Michel de Oliveira www.nmooliveira.com.br
Mobile 55 51 92358577
Consultor de TI
Embarcadero Delphi 2009 Programming

Public Profile
http://www.linkedin.com/in/newtongaucho




2009/9/11 Jackson [ Condata Informática ] <jac...@condatars.com.br>

Diego Campos Rosa

unread,
Sep 11, 2009, 10:08:31 AM9/11/09
to dug...@googlegroups.com
Jackson,

Segue em anexo um exemplo simples de ClientDataset e XMLDocument.

unit Uxml;

interface

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

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    ClientDataSet1: TClientDataSet;
    DataSource1: TDataSource;
    ClientDataSet1CODCLI: TStringField;
    ClientDataSet1NOME: TStringField;
    ClientDataSet1CNPJ: TStringField;
    ClientDataSet1FONE: TStringField;
    XMLDocument1: TXMLDocument;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Nodo: IXMLNode;
begin

  XMLDocument1.Active := True;
  //Limpa os Nos do XML
  XMLDocument1.ChildNodes.Clear;
  //Versao do xml
  XMLDocument1.Version := '1.0';
  //Codificação do xml
  XMLDocument1.Encoding := 'UTF-8';
  //root do xml
  XMLDocument1.AddChild('XML');

  //Cria o Nó
  XMLDocument1.DocumentElement.AddChild('VERS');
  //Pega a referencia do nó para criar os elementos
  Nodo := XMLDocument1.DocumentElement.ChildNodes['VERS'];
  //Cria os elementos do Nó
  Nodo.AddChild('VER').NodeValue := '1.0';
  Nodo.AddChild('DATA').NodeValue := '10/09/2009';

  ClientDataSet1.First;
  while not ClientDataSet1.Eof  do
  begin
    XMLDocument1.DocumentElement.AddChild('CLIENTE');
    Nodo := XMLDocument1.DocumentElement.ChildNodes['CLIENTE'];
    Nodo.AddChild('CODCLI').NodeValue := ClientDataSet1CODCLI.AsString;
    Nodo.AddChild('NOME').NodeValue := ClientDataSet1NOME.AsString;
    Nodo.AddChild('CNPJ').NodeValue := ClientDataSet1CNPJ.AsString;
    Nodo.AddChild('FONE').NodeValue := ClientDataSet1FONE.AsString;

    ClientDataSet1.Next;
  end;

  XMLDocument1.SaveToFile('C:\ExemploXML.xml');
  ShowMessage('Processo finalizado!!!');

end;

end.

Espero que te ajude.


Atenciosamente,
Diego Campos Rosa diego.ca...@gmail.com
Mobile 55 51 84597563
Consultor na Aquasoft Tecnologia da Informação
Fone +55 51 3022-3188 - Porto Alegre/RS - Brasil
CodeGear™ Delphi® 2007

Public Profile
http://www.linkedin.com/in/diegocamposrosa82


2009/9/11 Newton Michel de Oliveira <newton...@gmail.com>

Newton Michel de Oliveira

unread,
Sep 11, 2009, 10:18:39 AM9/11/09
to dug...@googlegroups.com
Diego,
   este é para salvar... para ler ele pode utilizar o exemplo que fiz.

Diego Campos Rosa

unread,
Sep 11, 2009, 10:24:12 AM9/11/09
to dug...@googlegroups.com
Newton ,

Pelo que entendi ele queria salvar aquela estrutura. Mas a tua dica de ler o XML também fica valendo amigo...

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 10:38:45 AM9/11/09
to dug...@googlegroups.com
mas a leitura vou fazer depois... refaze-la  que dai não necessita arquivo XTR
 
----- Original Message -----

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 10:37:22 AM9/11/09
to dug...@googlegroups.com
Em time q esta ganhando não se mexe... a leitura esta sendo feita com o XMLTransformProvider...
 
agora a gravação esse exemplo do Diego ficou 100% era exatamente o q estava precisando...
 
a leitura do exemplo do Newton ainda não testei... mas vou fazer assim na proxima!!!!
 
mto obrigado a todos...
 
flw!!!
 
 
----- Original Message -----

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 10:49:31 AM9/11/09
to dug...@googlegroups.com
tem como quebrar linha (nova linha), ou seja, a cada elemento novo uma linha
<xml>
<vers></vers>
<cliente></cliente>
<cliente></cliente>
</xml>
----- Original Message -----

Diego Campos Rosa

unread,
Sep 11, 2009, 10:58:15 AM9/11/09
to dug...@googlegroups.com
Ele já faz isso automatico.

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 10:58:23 AM9/11/09
to dug...@googlegroups.com
Putz... não rolou legal não...
 
olha como ficou o XML, note q ficou tudo me primeiro elemento cliente!!! e o ultimo ficou vazio!!!
- <XML>
- <VERS>
  <VER>1.0</VER>
  <DATA>10/09/2009</DATA>
  </VERS>
- <CLIENTE>
  <CODCLI />
  <NOME />
  <CODCLI>1</CODCLI>
  <NOME>aaa</NOME>
  <CNPJ />
  <FONE />
  <CODCLI>2</CODCLI>
  <NOME>ccc</NOME>
  <CNPJ />
  <FONE />
  </CLIENTE>
  <CLIENTE />
  </XML>
 
----- Original Message -----
Antes de imprimir pense em seu compromisso com o Meio Ambiente











Newton Michel de Oliveira

unread,
Sep 11, 2009, 11:00:27 AM9/11/09
to dug...@googlegroups.com
o padrão xml não é quebrar, mas o arquivo ficou certinho, o que ficou errado?


Newton Michel de Oliveira www.nmooliveira.com.br
Mobile 55 51 92358577
Consultor de TI
Embarcadero Delphi 2009 Programming

Public Profile
http://www.linkedin.com/in/newtongaucho




2009/9/11 Jackson [ Condata Informática ] <jac...@condatars.com.br>

Newton Michel de Oliveira

unread,
Sep 11, 2009, 11:01:46 AM9/11/09
to dug...@googlegroups.com
ah eu vi... mas me envia o teu programa que gera deixa eu olhar...


Newton Michel de Oliveira www.nmooliveira.com.br
Mobile 55 51 92358577
Consultor de TI
Embarcadero Delphi 2009 Programming

Public Profile
http://www.linkedin.com/in/newtongaucho




Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 11:02:32 AM9/11/09
to dug...@googlegroups.com
deu guru no cliente, ele adicionou tudo no primeiro...
mas tem como forçar a quebra??

Jackson [ Condata Informática ]

unread,
Sep 11, 2009, 11:07:20 AM9/11/09
to dug...@googlegroups.com
agora deu!!!!
 
troquei...
XMLDocument1.DocumentElement.AddChild('CLIENTE');
Nodo := XMLDocument1.DocumentElement.ChildNodes['CLIENTE'];
 
por essa linha apenas
Nodo := XMLDocument1.DocumentElement.AddChild('CLIENTE');
Reply all
Reply to author
Forward
0 new messages