Função pra converter XML pra salvar em banco

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função pra converter XML pra salvar em banco

Mensagem por JoséQuintas »

Andei fazendo uma pesquisa nos mais de 100.000 XMLs que tenho.
Em nenhum XML encontrei CHR(, então pensei em usar isso na f'órmula.

Problema: salvar XMLs no MySql sem perder caracteres especiais, e sem aumentar muito o tamanho
Solução: Transformar caracteres especiais em CHR(000)

O que acham?

Obs.
Apesar do MySql aceitar, acho que alguns poderiam sair da lista de aceitos, como * e ?

Código: Selecionar todos

FUNCTION XmlToSave( cXml )
LOCAL cNovoXml := ""
FOR nCont = 1 TO Len( cXml )
   cChar := Substr( cXml, nCont, 1 )
   DO CASE
   CASE cChar $ " "                          // Ascii 32
   CASE cChar $ ["]                          // Ascii 34
   CASE cChar $ "#"                          // Ascii 35
   Case cChar $ "%"                          // Ascii 37
   CASE cChar $ "()"                         // Ascii 40 e 41
   CASE cChar $ "*"                          // Ascii 42
   CASE cChar $ "+,-./"                      // Ascii 43 a 47
   CASE cChar $ "0123456789"                 // Ascii 48 a 57
   CASE cChar $ ":;<=>"                      // Ascii 58 a 62
   CASE cChar $ "?"                          // Ascii 63
   CASE cChar $ "@"                          // Ascii 64
   CASE cChar $ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // Ascii 65 a 90
   CASE cChar $ "_"                          // Ascii 95
   CASE cChar $ "abcdefghijklmnopqrstuvwxyz" // Ascii 97 a 122
   CASE cChar $ "~"                          // Ascii 126
   OTHERWISE
      cChar := "CHR(" + StrZero( Ascii( cChar ), 3 ) + ")"
   ENDCASE
   cNovoXml += cChar
NEXT
RETURN cNovoXml

FUNCTION XmlFromSave( cXml )
LOCAL nCont
FOR nCont = 1 TO 255
   IF Chr(nCont) != ConvertTo(Chr(nCont)) // pra agilizar(*)
      cChar := "CHR(" + StrZero( nCont, 3 ) + ")"
      cXml := StrTran( cXml, cChar, Chr( nCont ) )
   ENDIF
NEXT
RETURN cXml
Uso:
salva usando XmlToSave( cXml )
recupera usando XmlFromSave( cXml )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Função pra converter XML pra salvar em banco

Mensagem por alxsts »

[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função pra converter XML pra salvar em banco

Mensagem por JoséQuintas »

Me parece que todas as formas de salvamento conterão falhas.
O próprio emissor do governo comete falhas, e salva XMLs autorizados inválidos.
Por essas e outras, ainda não estou me importando em ter XMLs inválidos no banco de dados.
Dos mais de 100.000 XMLs, imagino que pelo menos 1% estejam inválidos, o que seriam 1.000 XMLs.
Sem contar que até 2009 (ou 2010), não era obrigatório salvar protocolo, o que torna esses XMLs inválidos.
Alguns programas de email também modificam conteúdo de XMLs.

Resumindo:
Impossível ter todos os XMLs válidos. Talvez no futuro, quando tudo e todos usarem UTF-8, se não inventarem outro padrão.

Obs. O IE-10 continua interferindo nas postagens que faço aqui. Parece que está usando corrector ortográfico em ingles, parecido com o que usava no Outllook e Word. Mais uma pra se preocupar....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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