Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Salvar um arquivo xml iso-8859-1 ou converter de U


maxley_gyn

Question

Gostaria de saber se consigo salvar direto em xml iso-8859-1 com um clientdataset, ou converter de UTF-8?

Com o código abaixo salvo em UTF-8 normal mas queria salvar no outro formato citado, sou iniciante e estou fazendo um trabalho para a faculdade, desde já agradeço, muito obrigado.

if not (DmDados.SpExportaVenda.IsEmpty) then
        begin
          DmDados.SpExportaVenda.First;
          DmDados.CDSVenda.Open;
          while not DmDados.SpExportaVenda.Eof do
            begin
              DmDados.CDSVenda.Insert;
              DmDados.CDSVendaCodigoProduto.AsInteger   := DmDados.SpExportaVendaid_Produto.AsInteger;
              DmDados.CDSVendaCodigoVenda.AsInteger     := DmDados.SpExportaVendaid_Venda.AsInteger;
              DmDados.CDSVendaDescricao.AsString        := DmDados.SpExportaVendaDs_Produto.AsString;
              DmDados.CDSVendaApresentacao.AsString     := DmDados.SpExportaVendaDs_Apresentacao.AsString;
              DmDados.CDSVendaGrupo.AsString            := DmDados.SpExportaVendaDs_Grupo.AsString;
              DmDados.CDSVendaQuantidade.AsInteger      := DmDados.SpExportaVendaNr_QTD.AsInteger;
              DmDados.CDSVendaLote.AsString             := DmDados.SpExportaVendaDs_Lote.AsString;
              DmDados.CDSVendaEmissor.AsString          := DmDados.SpExportaVendaEmissor.AsString;
              DmDados.CDSVenda.Post;
              DmDados.SpExportaVenda.Next;
            end;
            DmDados.CDSVenda.SaveToFile(
              'C:\sgf\XML\vendacontrolados.xml', dfXMLUTF8);
            DmDados.CDSVenda.EmptyDataSet;
            DmDados.CDSVenda.Close;

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

no delphi tem exemplos na pasta Source

exemplo:

C:\program files\Borland\Delphi7\Source\xml\xdom.pas.

==========================================================

componente para isso ( mas é pago )

http://www.torry.net/pages.php?id=216

DIXml v.5.5.0 SW 4662 k 03 Jul 2014 By The Delphi Inspiration. DIXml is an embedded XML, XSLT, and EXSLT processing library for Borland / CodeGear Delphi. It is build on the libxml2, libxslt and libexslt libraries. However, DIXml requires no DLLs or any other external files whatsoever. All required code is compiled completely into the application's executable. DIXml is the most feature-complete XML and XSLT solution for Delphi.

Features:

  • XML and HTML reading and writing, pull and push parser modes.
  • XML and HTML document tree creation, traversal, load, and save.
  • SAX interface.
  • DTD validation.
  • Encoding support for UTF-8, UTF-16, ISO-8859-1, ASCII (all native).
  • XPATH processing.
  • NameSpace support.
  • XSLT processing.
  • File, memory, and customized input / output.
  • Outstanding performance.


Fully functional
Source: On purchase/registration
Price: $130
Source Price: $260 Download: D2005 D2006 D2007 D2009 D2010 D6 D7 DXE DXE2 DXE3 DXE4 DXE5 DXE6 DXE64

=======================================================================================

ou tente ver nesses links

http://www.activedelphi.com.br/forum/viewtopic.php?t=73830&sid=5c23effc79668257dbefbb7077e30dcd

http://embarcadero.newsgroups.archived.at/public.delphi.vcl.components.using/200902/0902231461.html

http://www.guj.com.br/java/153350-transformando-dados-de-um-resultset-em-xml

abraço

Link to comment
Share on other sites

  • 0

Muito obrigado pela ajuda mas ainda não consegui, com o clientdataset salvo em utf-8 muito fácil mas preciso salvar em iso-8859-1, to fazendo um mini programa de farmácia onde cadastro os produtos realizo vendas e exportar estas vendas para xml só que a Anvisa exige o padrão iso-8859-1 como o código do link abaixo.

http://www.anvisa.gov.br/sngpc/schemas/sngpc200608v1_0.xml

Link to comment
Share on other sites

  • 0

Ainda não consegui, na verdade eu queria salvar no formato do link acima da anvisa, mas estou salvando como no código abaixo e sei muito pouco de xml.

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<DATAPACKET Version="2.0">
-<METADATA>
-<FIELDS>
<FIELD fieldtype="i4" attrname="CodigoProduto"/>
<FIELD fieldtype="i4" attrname="CodigoAvaria"/>
<FIELD fieldtype="string" attrname="Descricao" WIDTH="20"/>
<FIELD fieldtype="string" attrname="Apresentacao" WIDTH="20"/>
<FIELD fieldtype="string" attrname="ClasseTerapeutica" WIDTH="20"/>
<FIELD fieldtype="string" attrname="Grupo" WIDTH="20"/>
<FIELD fieldtype="i4" attrname="Quantidade"/>
<FIELD fieldtype="string" attrname="Lote" WIDTH="20"/>
<FIELD fieldtype="date" attrname="Vencimento"/>
<FIELD fieldtype="date" attrname="DataAvaria"/>
<FIELD fieldtype="string" attrname="Emissor" WIDTH="20"/>
<FIELD fieldtype="string" attrname="Transmissor" WIDTH="20"/>
</FIELDS>
<PARAMS CHANGE_LOG="1 0 4 2 0 4"/>
</METADATA>
-<ROWDATA>
<ROW Transmissor="71604901187" Emissor="17171771236987" DataAvaria="20140822" Vencimento="20130201" Lote="di2020" Quantidade="1" Grupo="Portaria A" ClasseTerapeutica="Analgésico" Apresentacao="20mg 50cpr" Descricao="Dimorf" CodigoAvaria="3" CodigoProduto="6" RowState="4"/>
<ROW Transmissor="71604901187" Emissor="17171771236987" DataAvaria="20140822" Vencimento="20140202" Lote="te2020" Quantidade="1" Grupo="Portaria C" ClasseTerapeutica="Antiepileptico" Apresentacao="200mg 20cpr" Descricao="Tegretol" CodigoAvaria="3" CodigoProduto="7" RowState="4"/>
</ROWDATA>
</DATAPACKET>
Edited by Jhonas
Link to comment
Share on other sites

  • 0

Faça uma adaptação a esse código

uses xmldoc, xmlintf;

procedure TForm1.Button1Click(Sender: TObject);
var
LDocument: IXMLDocument;
RootNode: IXMLNode;
begin
LDocument := TXMLDocument.Create(nil);
LDocument.Active := True;
LDocument.Encoding := 'ISO-8859-1';

{ Define o conteudo do documento }
RootNode := LDocument.CreateElement('Test', '');
LDocument.DocumentElement := RootNode;

// Coloque aqui a rotina para ler o ClientDataSet e
// adicionar ao conteudo do Documento

LDocument.SaveToFile('C:\Teste7.xml');

end;


saida

<?xml version="1.0" encoding="ISO-8859-1" ?>
<Test />
.
.

abraço

Link to comment
Share on other sites

  • 0

Jhonas agradeço demais a sua ajuda mas não estou conseguindo implementar a rotina. Preciso do clientdataset ou posso trazer direto do banco?

Segue o código que estou tentando.

LDocument := TXMLDocument.Create(nil);
  LDocument.Active := True;
  LDocument.Encoding := 'ISO-8859-1';


  oDaoRelatorios.ExportaVenda(Dt1.DateTime, Dt2.DateTime);
  { Define o conteudo do documento }
  RootNode := LDocument.CreateElement('mensagemSGF','urn:sgf-schema');
  LDocument.DocumentElement := RootNode;


  while not DmDados.SpExportaVenda.Eof do
    begin
      RootNode := LDocument.CreateElement('codigo',IntToStr(DmDados.SpExportaVendaid_Produto.AsInteger));
      LDocument.DocumentElement := RootNode;
    end;
  // Coloque aqui a rotina para ler o ClientDataSet e
  // adicionar ao conteudo do Documento


  LDocument.SaveToFile('C:\Teste7.xml');
Link to comment
Share on other sites

  • 0

se voce quer fazer isso na mão dá mais trabalho ....

veja esse exemplo

Var
LDocument : IXMLDocument;
RootNode, Empresa, EmpAttrib, Filial, EmpFilialP, EmpFilialM, Endereco, Rua, Bairro, Municipio,
UF, CNPJ, CEP : IXMLNode;
begin

LDocument := TXMLDocument.Create(nil);
LDocument.FileName := '';
LDocument.XML.Text := '';
LDocument.Active := False;
LDocument.Active := True;
LDocument.Version := '1.0';
LDocument.Encoding := 'ISO-8859-1';

// ROOT
RootNode := LDocument.AddChild('mensagemSGF','urn:sgf-schema');

// CRIAR ELEMENTO RAZAO SOCIAL
Empresa := LDocument.CreateNode('RAZAOSOCIAL', ntElement);
RootNode.ChildNodes.Add(Empresa);

// CRIAR ATRIBUTO RAZAO SOCIAL
EmpAttrib := LDocument.CreateNode('RAZAOSOCIAL', ntAttribute);
EmpAttrib.Text := 'DROGARIA são PAULO';
Empresa.AttributeNodes.Add(EmpAttrib);

// CRIAR ATRIBUTO CNPJ

CNPJ := LDocument.CreateNode('CNPJ', ntAttribute);
CNPJ.Text := '34.654.765/0001-07';
Empresa.AttributeNodes.Add(CNPJ);

// CRIAR ELEMENTO FILIAL
Filial := LDocument.CreateNode('FILIAL', ntElement);
Empresa.ChildNodes.Add(Filial);

// CRIAR ATRIBUTO FILIAL 1
EmpFilialP := LDocument.CreateNode('FILIAIS', ntAttribute);
EmpFilialP.Text := 'DROGARIA são MIGUEL';
Filial.AttributeNodes.Add(EmpFilialP);

// CRIAR ATRIBUTO FILIAL 2
EmpFilialM := LDocument.CreateNode('FILIAIS', ntAttribute);
EmpFilialM.Text := 'DROGARIA são JOAO';
Filial.AttributeNodes.Add(EmpFilialM);

// CRIAR ELEMENTO ENDERECO
Endereco := LDocument.CreateNode('ENDERECO', ntElement);
RootNode.ChildNodes.Add(Endereco);

// CRIAR ATRIBUTO ENDERECO
Rua := LDocument.CreateNode('RUA', ntAttribute);
Rua.Text := 'Rua das Palmeiras, 777';
Endereco.AttributeNodes.Add(Rua);

// CRIAR ATRIBUTO BAIRRO
Bairro := LDocument.CreateNode('BAIRRO', ntAttribute);
Bairro.Text := 'Vila Albuquerque';
Endereco.AttributeNodes.Add(Bairro);

// CRIAR ATRIBUTO MUNICIPIO
Municipio := LDocument.CreateNode('MUNICIPIO', ntAttribute);
Municipio.Text := 'São Paulo';
Endereco.AttributeNodes.Add(Municipio);

// CRIAR ATRIBUTO UF
UF := LDocument.CreateNode('UF', ntAttribute);
UF.Text := 'SP';
Endereco.AttributeNodes.Add(UF);

// CRIAR ATRIBUTO CEP

CEP := LDocument.CreateNode('CEP', ntAttribute);
CEP.Text := '11.240-123';
Endereco.AttributeNodes.Add(CEP);

// SALVAR O DOCUMENTO

LDocument.SaveToFile('C:\Teste7.xml');
LDocument.Active := False;

end;

========================================================================

voce vai ter como saida isso:

<?xml version="1.0" encoding="ISO-8859-1" ?>
- <mensagemSGF xmlns="urn:sgf-schema">
- <RAZAOSOCIAL xmlns="" RAZAOSOCIAL="DROGARIA são PAULO" CNPJ="34.654.765/0001-07">
<FILIAL FILIAIS="DROGARIA são JOAO" />
</RAZAOSOCIAL>
<ENDERECO xmlns="" RUA="Rua das Palmeiras, 777" BAIRRO="Vila Albuquerque" MUNICIPIO="São Paulo" UF="SP" CEP="11.240-123" />
</mensagemSGF>

Para usar o ClientDataSet voce teria que definir quem é o elemento e quem é o atributo

ou pode tentar o link do código de conversão de UTF-8 para ISO-8859-1

abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...