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
salva usando XmlToSave( cXml )
recupera usando XmlFromSave( cXml )

