Página 1 de 1

Criando um arquivo XML

Enviado: 02 Fev 2015 23:16
por marcos.gurupi
Caros, estou criando um arquivo xml conforme o codigo abaixo:

Código: Selecionar todos

	Select("Clientes")
   ordsetfocus(2)
   dbgotop()
	sXMLinha = "<xml>"+CRLF
	Do While !Eof()                  
      sXMLinha += "<clientes>"+CRLF
      sXMLinha += "<ecnpj>"+RetiraCar(Empresa->cgc)+"</ecnpj>"+CRLF
   	sXMLinha += "<codigo>"+Transform(clientes->Codigo,"999999")+"</codigo>"+CRLF
	   sXMLinha += "<cpfcnpj>"+RetiraCar(clientes->cpf)+"</cpfcnpj>"+CRLF
	   sXMLinha += "<fantasia>"+Alltrim(RetiraAcento(clientes->fantasia))+"</fantasia>"+CRLF
	   sXMLinha += "<endereco>"+Alltrim(RetiraAcento(clientes->endres))+"</endereco>"+CRLF
	   sXMLinha += "<bairro>"+Alltrim(RetiraAcento(clientes->BaiRes))+"</bairro>"+CRLF
	   sXMLinha += "<cidade>"+Alltrim(RetiraAcento(clientes->CidRes))+"</cidade>"+CRLF
	   sXMLinha += "<cep>"+RetiraCar(clientes->CepRes)+"</cep>"+CRLF
	   sXMLinha += "<telefone>"+Alltrim(RetiraAcento(clientes->telres))+"</telefone>"+CRLF
	   sXMLinha += "<ieident>"+Alltrim(RetiraAcento(clientes->Ident))+"</ieident>"+CRLF
	   sXMLinha += "</clientes>"+CRLF
      dbskip()
      vLinha+=1
   END
   sXMLinha += "</xml>"
If memowrit(vDirExpo+"clientes.xml",sXMLinha)=.f.
   Fim_Run()
 	MsgStop("Nao foi possivel gravar o arquivo Clientes.xml no destino","Clientes XML")
   Select(Areant)
  	Return .f.
Endif

Quando o cadastro estah perfeito sem caracteres eu consigo visualizar o XML como Xml e efetuar a importacao dele. Acontece q quando no cadastro tem acentuacao ou caracteres isso invalida o XML. Alguem saberia me dizer como retirar esses caracteres/acentuacao ?

Criando um arquivo XML

Enviado: 03 Fev 2015 10:49
por HASA
:))
Bom dia, veja a Function TiraAcento(mTexto) no seguinte tópico: http://pctoledo.com.br/forum/viewtopic.php?f=43&t=13329
:)Pos
HASA

Criando um arquivo XML

Enviado: 03 Fev 2015 12:03
por alxsts
Olá!

Um campo em arquivo XML pode conter normalmente os caracteres acentuados da tabela ASCII. Só não pode conter alguns caracteres que são especiais para XML, como <, > e &, por exemplo. Provavelmente nos registros do teu arquivo tem alguns destes caracteres. Por exemplo, o cliente de nome "Fulano & Beltrano Advogados Associados".

Se preferir, pode criar uma função que transforma todos os caracteres especiais e acentuados nos respectivos códigos HTML. Veja a tabela "Tabela de Acentos e Caracteres Especiais"

Criando um arquivo XML

Enviado: 03 Fev 2015 12:13
por JoséQuintas
Além do problema que mencionou, tem dois erros no seu XML:

1) XML não tem CRLF
2) Ao gravar com MemoWrit(), é adicionado Ctrl-Z no final, padrão do DOS para fim de arquivo.

Retire os CRLF, e use hb_MemoWrit().

Sobre os caracteres, talvez você possa montar uma tabela pra eles.
Usando um FOR/NET pode identificar cada letra, e pesquisar numa lista.
Comece por algo como:

Código: Selecionar todos

cListaChar := "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=+.,<>?" + Chr(34)
FOR nCont = 1 TO Len( cTexto )
   cLetra := Substr( cTexto, nCont, 1 )
   IF .NOT. cLetra $ cListaChar
      ? nCont, Asc( cLetra ), cLetra
   ENDIF
NEXT
E depois, conforme resultado, pode montar uma função de conversão.

Código: Selecionar todos

cTexto := StrTran( cTexto, cCaractereDe, cCaracterePara )

Criando um arquivo XML

Enviado: 03 Fev 2015 15:28
por marcos.gurupi
Obrigado a todos.

A funcao tira acento eu jah aplicava. Como pode observar no codigo postado.

Caro Jose Quintas a funcao hb_MemoWrit() eh de que xhb ? Qual a versao e lib usada.

Marcos Roberto.

Criando um arquivo XML

Enviado: 03 Fev 2015 18:36
por JoséQuintas
É do próprio Harbour.
Não sei a versão oficial, mas a versão do vszakats informa o que adicionar caso falte alguma função do Harbour.
Em todo caso, digite hbmk2 -find memowrit.
Vai mostrar as funções com nome parecido, e a lib correspondente.

Criando um arquivo XML

Enviado: 03 Fev 2015 19:30
por marcos.gurupi
Entaum "melo" aqui eu uso o xhb

:(

Teria uma outra solucao para n usar o CRLF em xhb ?

Criando um arquivo XML

Enviado: 03 Fev 2015 20:09
por JoséQuintas
Olhando a lib que montei pra hbnfe, de compatibilidade pra xHarbour:

Código: Selecionar todos

FUNCTION hb_MemoWrit( cFileName, cText )
   RETURN MemoWrit( cFileName, cText, .F. )

Criando um arquivo XML

Enviado: 05 Fev 2015 00:05
por marcos.gurupi
Caro Jose Quintas, mesmo usando a funcao acima o arquivo ainda fica com uma caractere no final. Somente apos tirar manualmente o arquivo eh reconhecido como XML.

Criando um arquivo XML

Enviado: 05 Fev 2015 06:45
por JoséQuintas
Confirme então o último parâmetro, teste usando .T..

Criando um arquivo XML

Enviado: 05 Fev 2015 12:08
por Kapiaba

Código: Selecionar todos


Voce pode tirar direto do banco de dados

      WNOME:= ALLTRIM(TIRA_ACENTUACAO(CADCLIEN->CLIENTE))

E direto do *.XML

      cDocXml = TIRA_ACENTUACAO( cDocXml )

      // aqui retire o que estiver errado.
      cDocXml = StrTran( cDocXml , "CorreCAo" , "Correcao" )

      nHandle:=Fcreate(cDestino+cFile)

      Fwrite(nHandle,cDocXml)
      FClose(nHandle)

//-> Retira a Acentuacao Errada do Banco de dados
FUNCTION TIRA_ACENTUACAO( cStr )

   local cStrNew := "", nX

   cAcentos := {"ƒ","Æ","Ç"," ","µ","…","·","‚","É","ê","ˆ","","Ò","í","Í","ó","¢","à","ä","å","“","â","ú","é","","š","ç","€","ã","Ã","á","Á","à","À","é","É","ê","Ê","í","Í","ó","Ó","õ","Õ","ô","Ô","ú","Ú","ü","Ü","ç","ù","AAO","§","¦","º","ª","€","‡","Ç","ç","'","`","ø","¡","Þ","×","Ø", chr(239)}

   cLetras  := {"A","A","A","A","A","A","A","E","E","E","E","E","E","I","I","O","O","O","O","O","O","O","U","U","U","U","C","C","A","A","A","A","A","A","E","E","E","E","I","I","O","O","O","O","O","O","U","U","U","U","C"," ","CAO",".",".",".",".","C","C","C","C","" ,"" ,".","I","I","I","I",    ""   }

   For nX := 1 TO LEN(cAcentos)

       cStrNew := StrTran(cStr, cAcentos[nX], cLetras[nX])

       cStr := cStrNew

   Next

Return( cStrNew )

Criando um arquivo XML

Enviado: 05 Fev 2015 12:40
por Jairo Maia
Olá Pessoal,

É que o MemoWrit() coloca o Chr(26) no final. Em Harbour basta trocar por Hb_MemoWrit(), mas em xHarbour a solução tem que ser assim:

Código: Selecionar todos

FUNCTION hb_MemoWrit( cFileName, cText )

 Local nHandle := FCreate( cFileName )
 FWrite( nHandle, cText, Len( cText ) )
 FClose( nHandle )

Return ( FError() = 0 )

Criando um arquivo XML

Enviado: 05 Fev 2015 13:07
por marcos.gurupi
Caros Colegas, obrigado pelas solucoes apresentadas.

Jose Quintas testei a funcao com o parametro .T. mas mesmo assim o arquivo ficou com o caractere no final

Para efeito de registro a solucao que deu certo foi a do Jairo Maia. Com a funcao q ele apresentou o XML ficou sem o caractere no final do documento.


TOPICO SOLUCIONADO
:-Y