Pergunta

Em vez da sobrecarga com binário salvar como Base64 , eu queria saber se você poderia armazenar diretamente double-byte streams binários em arquivos XML, usando CDATA, ou comentando-o para fora, ou algo assim?

Foi útil?

Solução

Você pode armazená-lo como CDATA, mas há o risco de que algumas seqüências de bytes irá avaliar como XML válido que fecha a seção CDATA. Depois de um rápido olhar para http: // www. w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect , parece que você pode ter qualquer seqüência de caracteres, exceto "]]>". Ter um olhar para o que é um XML válido caractere também.

Outras dicas

O personagem Nul ( '\ 0' no C) não é em qualquer lugar válida em XML, mesmo como uma fuga (& # 0;).

Não, você não pode usar CDATA sozinho para injetar dados binários em um arquivo XML.

Em XML1.0 (porque XML 1.1 é mais permissiva, mas não sobre caracteres de controle), as seguintes restrições aplicam-se a personagens CDATA:

CData      ::=      (Char* - (Char* ']]>' Char*)) 
Char       ::=      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

Isso significa que existem vários caracteres ilegais, entre eles estão:

  • caracteres de controlo XML ilegais 0x00 a 0x20 excepto novas linhas, símbolos de retorno e as abas
  • UTF-8 sequências ilegais como 0xFF ou a não canónica 0b1100000x 0b10xxxxxx

Além disso, em um teor de entidade padrão sem CDATA:

  • "<" e ">" utilização são ilegais
  • "&" uso é restrito (&eacute; é OK, &zajdalkdza; não é)

Assim CDATA é apenas uma maneira de permitir que "<", ">" e "&", restringindo "]]>" em vez. Não resolve o XML ilegal, Unicode e emissão caracteres UTF-8 que é o principal problema.

Soluções:

  1. Use Base64 com 33% sobrecarga, mas um grande apoio em todas as linguagens de programação e o fato de que é um padrão
  2. Use BaseXML com implementações ainda limitado, mas 20% sobrecarga única
  3. dados não codificam binários dentro XML, se possível, transferi-lo separadamente

XML é um formato de texto simples - não usá-lo para armazenar dados binários. Coloque os blobs binários em arquivos separados e adicionar um elemento a seu XML que faz referência a esses arquivos. Se você deseja armazenar todos os blobs binários em um único arquivo, adicionar um atributo offset ou algo assim ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top