Verwenden Sie CDATA Raw-Binary-Streams zu speichern?
Lösung
Sie können speichern Sie es als CDATA, aber es ist das Risiko, dass einige Byte-Sequenzen, um gültige XML evaluieren, die den CDATA-Abschnitt schließt. Nach einem kurzen Blick auf http: // www. w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect , es scheint, dass Sie eine beliebige Folge von Zeichen mit Ausnahme haben kann „]]>“. Hier finden Sie aktuelle was ein gültiges XML ist char zu.
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 (
é
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:
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 ...