2009-02-02 10 views

Respuesta

-1

Puede almacenarlo como CDATA, pero existe el riesgo de que algunas secuencias de bytes se evalúen como XML válido que cierra la sección CDATA. Después de un rápido vistazo al http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect, parece que puede tener cualquier secuencia de caracteres excepto "]]>". Eche un vistazo al what is a valid XML char también.

+1

¿No significa que no, no puede, ya que 0-8, B, C, E, F FFFE y FFFF son caracteres no válidos? –

+0

Downvoting porque hay muchas secuencias de bytes que no se conservarán. Al decir "no preservar", quiero decir que no es posible recuperar los datos binarios originales de los datos codificados por CDATA. Vea las respuestas y comentarios de Pete. – rwong

+0

es mucho más arriesgado, de lo que sugiere aquí. Vea la respuesta de Pete ... – Phil

11

El carácter Nul ('\ 0' en C) no es válido en ningún lugar en XML, incluso como un escape (& # 0;).

+0

Supongo porque los archivos XML tienen terminación nula. –

+2

@Jeremy: No lo son. Nulo simplemente no es un carácter XML válido, probablemente debido a cadenas terminadas en nulo en un lenguaje de programación popular ... – Christoph

+0

Tenga en cuenta que el estándar no es 100% claro al respecto.Las definiciones de rango de caracteres excluyen el byte 0, pero algunos otros textos dicen que cualquier carácter por debajo de 127 es válido. –

4

XML es un formato de texto plano; no lo use para almacenar datos binarios. Coloque los blobs binarios en archivos separados y agregue un elemento a su XML que haga referencia a estos archivos. Si desea almacenar todos los blobs binarios en un solo archivo, agregue un atributo de desplazamiento o algo así ...

+0

Sí, y ¿cómo se supone que Flash debe conectarse y leer archivos binarios descargados? (Solo ActionScript 2) –

+0

No me proporcione la conversación ByteArray o URLLoader. Esto es solo AS2. –

+2

@Jeremy: ¿y dónde exactamente lo expresaste en tu pregunta? – Christoph

7

No, no puede usar CDATA solo para inyectar datos binarios en un archivo XML.

En XML1.0 (porque XML 1.1 es más permisiva, pero no se trata de caracteres de control), las siguientes restricciones se aplican a caracteres CDATA:

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

Eso significa que hay varios caracteres ilegales, entre ellas se encuentran:

  • ilegales caracteres de control XML 0x00 a 0x20 excepto nuevas líneas, retornos de carro y las pestañas
  • ilegales UTF-8 secuencias como 0xFF o la no canónica 0b1100000x 0b10xxxxxx

Además de eso, en un contenido entidad estándar sin CDATA:

  • y el uso "<" ">" son ilegales
  • "&" El uso está restringido (&eacute; está bien, &zajdalkdza; es no)

Así CDATA es sólo una manera de permitir que "<", ">" y "&", mediante la restricción "]]>" en su lugar. No resuelve el problema de los caracteres XML, Unicode y UTF-8 ilegales.

Soluciones:

  1. Use Base64 con un 33% de gastos, pero un gran apoyo en todos los lenguajes de programación y el hecho de que es un estándar
  2. Uso BaseXML con implementaciones aún limitadas pero el 20% de gastos solo
  3. No codifique datos binarios dentro de XML si es posible, transfiéralos por separado