Página 1 de 1

Função pra converter XML pra salvar em banco

Enviado: 10 Mar 2013 21:08
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 )

Função pra converter XML pra salvar em banco

Enviado: 11 Mar 2013 00:44
por alxsts

Função pra converter XML pra salvar em banco

Enviado: 11 Mar 2013 12:49
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....