Andere Tipps

Die NUL-Zeichen ( '\ 0' in C) sind nicht gültig überall in XML, auch als Escape (& # 0;).

Nein, Sie können nicht CDATA allein binäre Daten in einer XML-Datei zu injizieren.

In XML1.0 (weil XML 1.1 zügigen ist, aber nicht um Kontrolle Zeichen) gelten die folgenden Einschränkungen CDATA Zeichen:

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

Das heißt, es gibt mehrere Zeichen illegal, unter ihnen sind:

  • illegale XML-Steuerzeichen 0x00 bis 0x20 außer neuen Linien, Zeilenumbrüche und Tabs
  • illegal UTF-8-Sequenzen wie 0xFF oder der nicht kanonischen 0b1100000x 0b10xxxxxx

Zusätzlich zu, dass in einem Standard Entitätsinhalt ohne CDATA:

  • "<" und ">" Verwendung ist illegal
  • "&" Verwendung eingeschränkt ist (&eacute; ist OK, &zajdalkdza; nicht)

So CDATA ist nur ein Weg, damit "<", ">" und "&", durch die Einschränkung "]]>" statt. Es löst nicht die illegalen XML, Unicode und UTF-8-Zeichen Frage, die das Hauptproblem ist.

Lösungen:

  1. Mit Base64 mit 33% Overhead, aber eine große Unterstützung in allen Programmiersprachen und die Tatsache, dass es ein Standard
  2. Mit BaseXML mit noch begrenzt Implementierungen aber 20% Overhead nur
  3. Sie kodieren keine Binärdaten in XML, wenn möglich, übertragen sie separat

XML ist ein Klartextformat - verwenden Sie es nicht binäre Daten zu speichern. Setzen Sie die Binärblob in separaten Dateien und fügen Sie ein Element zu Ihrem XML, die diese Dateien verweist. Wenn Sie alle Binärblob in einer einzigen Datei gespeichert werden sollen, fügen Sie ein Offset-Attribut oder so ähnlich ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top