Erro de Leitura XML com acentuação

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro de Leitura XML com acentuação

Mensagem por asimoes »

Pessoal,

Estou testando esta function:

Alguns endereços tem acentuação por exemplo: 20950130 e acontece erro na leitura usando getElementsByTagName

Código: Selecionar todos

cCEP=SPACE(8)
@ 10,10 SAY "INFORME O CEP: "
@ 11,10 GET cCEP PICT "!!!!!!!!"
READ
oPg := CreateObject("Microsoft.XMLHTTP")
oPg:Open("GET","http://cep.republicavirtual.com.br/web_cep.php?cep=" + cCep + "&formato=xml",.F.)
oPg:Send()
cBuf := oPg:responseText

oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM")
oXMLDoc:async := .f.
lSuccess := oXMLDoc:loadXML( cBuf )

cUF :=""
cCID:=""
cBAI:=""
cLOG:=""
cRUA:=""

IF lSuccess
   cUF:=oXMLDoc:getElementsByTagName( "uf" ):item(0):Text
   cCID:=oXMLDoc:getElementsByTagName( "cidade" ):item(0):Text
   cBAI:=oXMLDoc:getElementsByTagName( "bairro" ):item(0):Text
   cLOG:=oXMLDoc:getElementsByTagName( "tipo_logradouro" ):item(0):Text
   cRUA:=oXMLDoc:getElementsByTagName( "logradouro" ):item(0):Text
ENDIF

@ 12,10 SAY "ENDERECO.: " + cLOG + ": "+ cRUA
@ 13,10 SAY "BAIRRO...: " + cBAI
@ 14,10 SAY "CIDADE...: " + cCID
@ 15,10 SAY "ESTADO...: " + cUF
INKEY(0)
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4666
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 1 vez
Contato:

Erro de Leitura XML com acentuação

Mensagem por rochinha »

Amiguinho,

Acrescente no retorno de seu resultado a passagem para a funcao a seguir e depois pegue o conteudo para cada variavel do que restar.

Código: Selecionar todos

FUNCTION mOEMTOANSI( _oque_ )
   LOCAL cCAcentos := 'àâêôûãõáéíóúçüîäëïöèìòùÀÂÊÔÛÃÕÁÉÍÓÚÇÜÎÄËÏÖÈÌÒÙÆ'
   LOCAL cSAcentos := 'aaeouaoaeioucuiaeioeiouAAEOUAOAEIOUCUIAEIOEIOUA'
   for i := 1 to Len( cCAcentos )
       _oque_ := StrTran( _oque_, SubStr( cCAcentos, i, 1), SubStr( cSAcentos, i, 1) )
   next    
   RETURN _oque_   
Procure no forum, tem outras funcoes melhores que a minha. É que quando não encontro acabo re-re-re-re-inventando a roda.

Este caracteres podem realmente causar este tipo de problema na leitura do retorno.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro de Leitura XML com acentuação

Mensagem por asimoes »

Rochinha,

O problema é que o xml que tá vindo tá "bichado" veja a tag logradouro, a acentuação truncou o caracter < que invalidou a leitura do xml.
Se houvesse um metodo para transformar de utf-8 para iso-8859-1, este xml embora apareça com encoding certo ele é utf-8 no conteúdo das tags

<?xml version="1.0" encoding="iso-8859-1" ?>
<webservicecep>
<resultado>1</resultado>
<resultado_txt>sucesso - cep completo</resultado_txt>
<uf>RJ</uf>
<cidade>Rio de Janeiro</cidade>
<bairro>Rocha</bairro>
<tipo_logradouro>Rua</tipo_logradouro>
<logradouro>S?Jo?/logradouro>

</webservicecep>
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4666
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 1 vez
Contato:

Erro de Leitura XML com acentuação

Mensagem por rochinha »

Amiguinho,

Tempos atrás eu havia contribuido com este webservice apresentando exemplo de código em xBase, em especial em Harbour, pois eles tinham exemplos em várias outras linguagens.

Analise este código, adapte-o e veja o funcionamento:

Código: Selecionar todos


/*  Função de busca de Endereço pelo CEP    
 *  -   Desenvolvido José Carlos da Rocha para ajaxbox.com.br    
 *  -   Adaptação de exemplo para utilização com FIVEWIN FOR HARBOUR
 *  -   Utilizando WebService de CEP da republicavirtual.com.br    
 */
#include "FiveWin.ch"

function main( cep )
   LOCAL resultado := {}

   DEFAULT cep:="05171340"

   url := "http://republicavirtual.com.br/web_cep.php?cep="+ cep +"&formato=query_string"  

   xmlhttp := TOleAuto():New("MSXML2.ServerXMLHTTP")
   xmlhttp:Open( "GET", url, .F.)
   xmlhttp:Send()

   xmlhttp_resultado := xmlhttp:responseText    

   arr_resultado := Split( xmlhttp_resultado, "&" )

   txt_resultado := ""

   if .not. ( len(arr_resultado) = 1 )

      for i = lbound( arr_resultado ) to ubound( arr_resultado )   

          aadd( resultado, arr_resultado[ i ] )   

          txt_resultado := txt_resultado + StrTran( arr_resultado[ i ], "+", " " ) + CRLF

      next 

      ? txt_resultado

   else

      ? "Falha na pesquisa do CEP." 

   endif

   return .t.

Function lBound()
   return 1

Function uBound( arr )
   return len( arr )

function Split( cString, cSeparator ) 
   LOCAL nPos 
   LOCAL aString := {} 
   DEFAULT cSeparator := ";" 
   cString := ALLTRIM( cString ) + cSeparator 
   DO WHILE .T. 
      nPos := AT( cSeparator, cString ) 
      IF nPos = 0 
         EXIT 
      ENDIF 
      AADD( aString, SUBSTR( cString, 1, nPos-1 ) ) 
      cString := SUBSTR( cString, nPos+1 ) 
   ENDDO 
   RETURN ( aString ) 

function str_replace( _oque_ )
   LOCAL cCAcentos := 'àâêôûãõáéíóúçüîäëïöèìòùÀÂÊÔÛÃÕÁÉÍÓÚÇÜÎÄËÏÖÈÌÒÙÆ'
   LOCAL cSAcentos := 'aaeouaoaeioucuiaeioeiouAAEOUAOAEIOUCUIAEIOEIOUA'
   for i := 1 to Len( cCAcentos )
       _oque_ := StrTran( _oque_, SubStr( cCAcentos, i, 1), SubStr( cSAcentos, i, 1) )
   next   
   RETURN _oque_

FUNCTION DecTOWhat( Oque, ParaQue )
  local aDecTOWhat := {}
  aadd( aDecTOWhat, {  32, "20", " ", "%20", "010 0000", "40" } )
  aadd( aDecTOWhat, {  33, "21", "!", "%21", "010 0001", "41" } )
  aadd( aDecTOWhat, {  34, "22", ["], "%22", "010 0010", "42" } )
  aadd( aDecTOWhat, {  35, "23", "#", "%23", "010 0011", "43" } )
  aadd( aDecTOWhat, {  36, "24", "$", "%24", "010 0100", "44" } )
  aadd( aDecTOWhat, {  37, "25", "%", "%25", "010 0101", "45" } )
  aadd( aDecTOWhat, {  38, "26", "&", "%26", "010 0110", "46" } )
  aadd( aDecTOWhat, {  39, "27", "'", "%27", "010 0111", "47" } )
  aadd( aDecTOWhat, {  40, "28", "(", "%28", "010 1000", "50" } )
  aadd( aDecTOWhat, {  41, "29", ")", "%29", "010 1001", "51" } )
  aadd( aDecTOWhat, {  42, "2A", "*", "%2A", "010 1010", "52" } )
  aadd( aDecTOWhat, {  43, "2B", "+", "%2B", "010 1011", "53" } )
  aadd( aDecTOWhat, {  44, "2C", ",", "%2C", "010 1100", "54" } )
  aadd( aDecTOWhat, {  45, "2D", "-", "%2D", "010 1101", "55" } )
  aadd( aDecTOWhat, {  46, "2E", ".", "%2E", "010 1110", "56" } )
  aadd( aDecTOWhat, {  47, "2F", "/", "%2F", "010 1111", "57" } )
  aadd( aDecTOWhat, {  48, "30", "0", "%30", "011 0000", "60" } )
  aadd( aDecTOWhat, {  49, "31", "1", "%31", "011 0001", "61" } )
  aadd( aDecTOWhat, {  50, "32", "2", "%32", "011 0010", "62" } )
  aadd( aDecTOWhat, {  51, "33", "3", "%33", "011 0011", "63" } )
  aadd( aDecTOWhat, {  52, "34", "4", "%34", "011 0100", "64" } )
  aadd( aDecTOWhat, {  53, "35", "5", "%35", "011 0101", "65" } )
  aadd( aDecTOWhat, {  54, "36", "6", "%36", "011 0110", "66" } )
  aadd( aDecTOWhat, {  55, "37", "7", "%37", "011 0111", "67" } )
  aadd( aDecTOWhat, {  56, "38", "8", "%38", "011 1000", "70" } )
  aadd( aDecTOWhat, {  57, "39", "9", "%39", "011 1001", "71" } )
  aadd( aDecTOWhat, {  58, "3A", ":", "%3A", "011 1010", "72" } )
  aadd( aDecTOWhat, {  59, "3B", ";", "%3B", "011 1011", "73" } )
  aadd( aDecTOWhat, {  60, "3C", "<", "%3C", "011 1100", "74" } )
  aadd( aDecTOWhat, {  61, "3D", "=", "%3D", "011 1101", "75" } )
  aadd( aDecTOWhat, {  62, "3E", ">", "%3E", "011 1110", "76" } )
  aadd( aDecTOWhat, {  63, "3F", "?", "%3F", "011 1111", "77" } )
  aadd( aDecTOWhat, {  64, "40", "@", "%40", "100 0000", "100" } )
  aadd( aDecTOWhat, {  65, "41", "A", "%41", "100 0001", "101" } )
  aadd( aDecTOWhat, {  66, "42", "B", "%42", "100 0010", "102" } )
  aadd( aDecTOWhat, {  67, "43", "C", "%43", "100 0011", "103" } )
  aadd( aDecTOWhat, {  68, "44", "D", "%44", "100 0100", "104" } )
  aadd( aDecTOWhat, {  69, "45", "E", "%45", "100 0101", "105" } )
  aadd( aDecTOWhat, {  70, "46", "F", "%46", "100 0110", "106" } )
  aadd( aDecTOWhat, {  71, "47", "G", "%47", "100 0111", "107" } )
  aadd( aDecTOWhat, {  72, "48", "H", "%48", "100 1000", "110" } )
  aadd( aDecTOWhat, {  73, "49", "I", "%49", "100 1001", "111" } )
  aadd( aDecTOWhat, {  74, "4A", "J", "%4A", "100 1010", "112" } )
  aadd( aDecTOWhat, {  75, "4B", "K", "%4B", "100 1011", "113" } )
  aadd( aDecTOWhat, {  76, "4C", "L", "%4C", "100 1100", "114" } )
  aadd( aDecTOWhat, {  77, "4D", "M", "%4D", "100 1101", "115" } )
  aadd( aDecTOWhat, {  78, "4E", "N", "%4E", "100 1110", "116" } )
  aadd( aDecTOWhat, {  79, "4F", "O", "%4F", "100 1111", "117" } )
  aadd( aDecTOWhat, {  80, "50", "P", "%50", "101 0000", "120" } )
  aadd( aDecTOWhat, {  81, "51", "Q", "%51", "101 0001", "121" } )
  aadd( aDecTOWhat, {  82, "52", "R", "%52", "101 0010", "122" } )
  aadd( aDecTOWhat, {  83, "53", "S", "%53", "101 0011", "123" } )
  aadd( aDecTOWhat, {  84, "54", "T", "%54", "101 0100", "124" } )
  aadd( aDecTOWhat, {  85, "55", "U", "%55", "101 0101", "125" } )
  aadd( aDecTOWhat, {  86, "56", "V", "%56", "101 0110", "126" } )
  aadd( aDecTOWhat, {  87, "57", "W", "%57", "101 0111", "127" } )
  aadd( aDecTOWhat, {  88, "58", "X", "%58", "101 1000", "130" } )
  aadd( aDecTOWhat, {  89, "59", "Y", "%59", "101 1001", "131" } )
  aadd( aDecTOWhat, {  90, "5A", "Z", "%5A", "101 1010", "132" } )
  aadd( aDecTOWhat, {  91, "5B", "[", "%5B", "101 1011", "133" } )
  aadd( aDecTOWhat, {  92, "5C", "\", "%5C", "101 1100", "134" } )
  aadd( aDecTOWhat, {  93, "5D", "]", "%5D", "101 1101", "135" } )
  aadd( aDecTOWhat, {  94, "5E", "^", "%5E", "101 1110", "136" } )
  aadd( aDecTOWhat, {  95, "5F", "_", "%5F", "101 1111", "137" } )
  aadd( aDecTOWhat, {  96, "60", "`", "%60", "110 0000", "140" } )
  aadd( aDecTOWhat, {  97, "61", "a", "%61", "110 0001", "141" } )
  aadd( aDecTOWhat, {  98, "62", "b", "%62", "110 0010", "142" } )
  aadd( aDecTOWhat, {  99, "63", "c", "%63", "110 0011", "143" } )
  aadd( aDecTOWhat, { 100, "64", "d", "%64", "110 0100", "144" } )
  aadd( aDecTOWhat, { 101, "65", "e", "%65", "110 0101", "145" } )
  aadd( aDecTOWhat, { 102, "66", "f", "%66", "110 0110", "146" } )
  aadd( aDecTOWhat, { 103, "67", "g", "%67", "110 0111", "147" } )
  aadd( aDecTOWhat, { 104, "68", "h", "%68", "110 1000", "150" } )
  aadd( aDecTOWhat, { 105, "69", "i", "%69", "110 1001", "151" } )
  aadd( aDecTOWhat, { 106, "6A", "j", "%6A", "110 1010", "152" } )
  aadd( aDecTOWhat, { 107, "6B", "k", "%6B", "110 1011", "153" } )
  aadd( aDecTOWhat, { 108, "6C", "l", "%6C", "110 1100", "154" } )
  aadd( aDecTOWhat, { 109, "6D", "m", "%6D", "110 1101", "155" } )
  aadd( aDecTOWhat, { 110, "6E", "n", "%6E", "110 1110", "156" } )
  aadd( aDecTOWhat, { 111, "6F", "o", "%6F", "110 1111", "157" } )
  aadd( aDecTOWhat, { 112, "70", "p", "%70", "111 0000", "160" } )
  aadd( aDecTOWhat, { 113, "71", "q", "%71", "111 0001", "161" } )
  aadd( aDecTOWhat, { 114, "72", "r", "%72", "111 0010", "162" } )
  aadd( aDecTOWhat, { 115, "73", "s", "%73", "111 0011", "163" } )
  aadd( aDecTOWhat, { 116, "74", "t", "%74", "111 0100", "164" } )
  aadd( aDecTOWhat, { 117, "75", "u", "%75", "111 0101", "165" } )
  aadd( aDecTOWhat, { 118, "76", "v", "%76", "111 0110", "166" } )
  aadd( aDecTOWhat, { 119, "77", "w", "%77", "111 0111", "167" } )
  aadd( aDecTOWhat, { 120, "78", "x", "%78", "111 1000", "170" } )
  aadd( aDecTOWhat, { 121, "79", "y", "%79", "111 1001", "171" } )
  aadd( aDecTOWhat, { 122, "7A", "z", "%7A", "111 1010", "172" } )
  aadd( aDecTOWhat, { 123, "7B", "{", "%7B", "111 1011", "173" } )
  aadd( aDecTOWhat, { 124, "7C", "|", "%7C", "111 1100", "174" } )
  aadd( aDecTOWhat, { 125, "7D", "}", "%7D", "111 1101", "175" } )
  aadd( aDecTOWhat, { 126, "7E", "~", "%7E", "111 1110", "176" } )
  for i = 1 to len( aDecTOWhat )
      if aDecTOWhat[ i ][ 1 ] = Oque
         return aDecTOWhat[ i ][ ParaQue ]
      endif
  next
  RETURN ""
Analise a função DecTOWhat( Oque, ParaQue ) como ela monta e como ela poderia devolver para voce um conteudo para limpar os dados retornados.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro de Leitura XML com acentuação

Mensagem por asimoes »

Rochinha,

Testei sua função, ela resolve parte do problema. Os acentos ainda são o problema.

Eu só consegui resolver isso usando este artificio:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
nHandleDLL:=HB_LibLoad("UrlMon.dll")
nStatus:=HB_DynCall( { "URLDownloadToFileA", nHandleDLL,HB_DYN_CALLCONV_STDCALL},0,"http://cep.republicavirtual.com.br/web_cep.php?cep=" + cVar0 + "&formato=xml","LOGRADOURO.XML",0,0)
cBuf:=HB_AnsiToOem(FileStr("LOGRADOURO.XML"))
Resulta:
<?xml version="1.0" encoding="iso-8859-1" ?>
- <webservicecep>
<resultado>1</resultado>
<resultado_txt>sucesso - cep completo</resultado_txt>
<uf>SP</uf>
<cidade>São Paulo</cidade>
<bairro>Jardim Santa Mônica</bairro>
<tipo_logradouro>Rua</tipo_logradouro>
<logradouro>Doutor Mário Mauro Ramos Mattoso</logradouro>
</webservicecep>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Com a sua função:

resultado=1
resultado_txt=sucesso - cep completo
uf=SP
cidade=S%E3o Paulo
bairro=Jardim Santa M%F4nica
tipo_logradouro=Rua
logradouro=Doutor M%E1rio Mauro Ramos Mattoso
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4666
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Curtiu: 1 vez
Contato:

Erro de Leitura XML com acentuação

Mensagem por rochinha »

Amiguinho,

Minha versão de Harbour não tem acesso aos recursos que vc utilizou, mas agora saberei o que usar quando necessitar destes resultados.

O importante é que voce conseguiu chegar a um resultado completo.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Kapiaba
Colaborador
Colaborador
Mensagens: 1914
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Erro de Leitura XML com acentuação

Mensagem por Kapiaba »

Em fivewin for xharbour, caso alguém precise:

// Ideia Original By Arthur Silvestre - 25/02/2014

Código: Selecionar todos

#include "FiveWin.ch"

FUNCTION Busca_CEP( cCep )

   LOCAL oHttp, cXML
   LOCAL cRes, cResTxt, cUf, cCidade, cTipo, cEnde, cBairro

   DEFAULT cCep:="05171340"

   cCep := StrTran(AllTrim(cCep),"-","")

   IF Len(cCep) != 8
      MsgAlert("Cep Inválido","Atenção")
      RETURN .F.
   ENDIF

   IF .NOT. IsInternet()

      return .t.

   endif

   oHttp:= TIpClientHttp():new( "http://cep.republicavirtual.com.br/web_cep.php?cep="+cCep+"&formato=xml" )
  
   IF ! oHttp:open()

      MsgAlert( "Servidor de CEPS , Fora do Ar ou Congestionado , Erro na conexão: "+ oHttp:lastErrorMessage() )

      RETURN .T.

   ENDIF
  
   cXML := oHttp:readAll()
   oHttp:close()
    
   IF Empty(cXML)

      MsgAlert("Ocorreu um Erro Inesperado , Envie outro CEP","Tente Novamente")

      RETURN .F.

   ENDIF
    
   cRes    := Substr( cXML, At("<resultado>",cXML)+11, At("</resultado>",cXML)-At("<resultado>",cXML)-11 )
   cResTxt := Substr( cXML, At("<resultado_txt>",cXML)+15, At("</resultado_txt>",cXML)-At("<resultado_txt>",cXML)-15 )
   cUf     := Substr( cXML, At("<uf>",cXML)+4, At("</uf>",cXML)-At("<uf>",cXML)-4 )
   cCidade := Substr( cXML, At("<cidade>",cXML)+8, At("</cidade>",cXML)-At("<cidade>",cXML)-8 )
   cTipo   := Substr( cXML, At("<tipo_logradouro>",cXML)+17, At("</tipo_logradouro>",cXML)-At("<tipo_logradouro>",cXML)-17 )
   cEnde   := Substr( cXML, At("<logradouro>",cXML)+12, At("</logradouro>",cXML)-At("<logradouro>",cXML)-12 )
   cBairro := Substr( cXML, At("<bairro>",cXML)+8, At("</bairro>",cXML)-At("<bairro>",cXML)-8 )

   ? ANSIUPPER( cEnde )

RETURN .T.

//-> Funcao para checar a Internet
FUNCTION IsInternet()

   LOCAL cIp, cVret := .F.

   WsaStartUp()

   // conforme pessoal do forum, e para chamar duas vezes ??
   cIp := GETHOSTBYNAME( "microsoft.com" )
   cIp := GETHOSTBYNAME( "microsoft.com" )

   WsaCleanUp()

   // Seguranca caso o provedor da microsoft esteja fora do ar...
   IF ( cIp <= "0.0.0.0" )

      WsaStartUp()

      cIp := GetHostByName( "google.com" )
      cIp := GetHostByName( "google.com" )

      WsaCleanUp()

   ENDIF

RETURN( cIp<>"0.0.0.0" )
//------------------------------------------------------------//
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Erro de Leitura XML com acentuação

Mensagem por bencz »

Veja a minha solução:

viewtopic.php?f=43&t=14610
Imagem
Kapiaba
Colaborador
Colaborador
Mensagens: 1914
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Erro de Leitura XML com acentuação

Mensagem por Kapiaba »

Obrigado bencz, veja o que ocorre em FiveWin for xHarbour, eu não uso harbour.

Application
===========
Path and name: c:\FWH1306\samples\teste.exe (32 bits)
Size: 2,509,824 bytes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20130422)
FiveWin Version: FWHX 13.05
Windows version: 6.1, Build 7601 Service Pack 1

Time from start: 0 hours 0 mins 5 secs
Error occurred at: 02/25/14, 14:37:49
Error description: Error BASE/1004 Class: 'NIL' has no exported method: DEPTH
Args:
[ 1] = U

Stack Calls
===========
Called from: => DEPTH( 0 )
Called from: source\rtl\txml.prg => TXMLITERATOR:NEW( 0 )
Called from: teste.prg => BUSCACEP:BUSCA( 83 )
Called from: teste.prg => BUSCACEP:NEW( 62 )
Called from: teste.prg => MAIN( 8 )


Obg. abs.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Erro de Leitura XML com acentuação

Mensagem por bencz »

Meu jovem, eu utilizo o xHarbour.com

Estranho, ele acusou o erro na parte do BAIRRO...

Debugue e veja as informações de:

Código: Selecionar todos

oIterator
oIterator:Next():cData
Imagem
Kapiaba
Colaborador
Colaborador
Mensagens: 1914
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Erro de Leitura XML com acentuação

Mensagem por Kapiaba »

Obrigado, funcionou.

Código: Selecionar todos

#include "FiveWin.ch"
#include "hbxml.ch"
#include "hbclass.ch"

function main()

   local cep := BuscaCEP():New("05171340")

   ? cep:GetTipo() + " " + cep:GetLogradouro()

   ? cep:GetBairro()
   ? cep:GetCidade()
   ? cep:GetUF()

return nil

class BuscaCEP

   private:
   data cLogradouro init ""
   data cBairro  init ""
   data cCidade  init ""
   data cTipo   init ""
   data cCep    init ""
   data cUF    init ""
   data cSrvResp  init ""

   public:
   method new(cep) constructor
   method busca(cep)
 
   inline method GetLogradouro()
      return ::cLogradouro
   endmethod
 
   inline method GetBairro()
      return ::cBairro
   endmethod
 
   inline method GetCidade()
     return ::cCidade
   endmethod
 
   inline method GetTipo()
      return ::cTipo
   endmethod
 
   inline method GetUF()
      return ::cUF
   endmethod
 
   inline method GetSrvSts()
      return ::cSrvResp
   endmethod

endclass

method new(cep) class BuscaCEP

   if cep != nil
      ::cCep := cep
   else
      ::cCep := "99999999"
   endif

   ::busca()

return self

method busca(cep) class BuscaCEP

   local oHttp, cXML
   local oDoc, oIterator
 
   if cep != nil
      ::cCep := cep
   endif
 
   oHttp:= TIpClientHttp():new( "http://cep.republicavirtual.com.br/web_cep.php?cep="+::cCep+"&formato=xml" )
   oHttp:open()
   cXML := oHttp:readAll()
   oHttp:close()
 
   oDoc := TXmlDocument():New(cXML, HBXML_STYLE_NOESCAPE)

   if oDoc:nError != HBXML_ERROR_NONE

      ? "Erro ao ler o XML dos correios"

   endif

   oIterator := TXmlIterator():New( oDoc:findfirst( "webservicecep" ) )

   if oIterator:Next():cData == "1"

      ::cSrvResp    := oIterator:Next():cData
      ::cUF         := oIterator:Next():cData
      ::cCidade     := oIterator:Next():cData
      ::cBairro     := oIterator:Next():cData
      ::cTipo       := oIterator:Next():cData
      ::cLogradouro := oIterator:Next():cData

   else

      ? "ERRO :("

  endif
 
return nil

// FIM DO PROGRAMA
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Erro de Leitura XML com acentuação

Mensagem por bencz »

Qual era o problema meu jovem ?
Imagem
Kapiaba
Colaborador
Colaborador
Mensagens: 1914
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Erro de Leitura XML com acentuação

Mensagem por Kapiaba »

Não sei Bencz, acho que era algum caracter especial que gravou na hora que baixei, o Borland bcc582 é meio chato.

Você tem skype?

Obg. abs.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Erro de Leitura XML com acentuação

Mensagem por bencz »

Certo jovem.

Meu skype é: ale_bencz
Imagem
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Erro de Leitura XML com acentuação

Mensagem por JoséQuintas »

o CEP do república virtual é desatualizado.
Se quiser usa meu webservice, está em contribuições.
Se abusar, deixa de ser on-line, e vai ficar igual o república virtual durante 1 hora.
Tem a opção de já retornar sem acentuação.

http://pctoledo.com.br/forum/viewtopic.php?f=43&t=13329
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder