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

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


maxley_gyn

Pergunta

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 para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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>
Editado por Jhonas
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...