Anstatt der Overhead mit saving binary as Base64, ich frage mich, ob Sie Double-Byte-Binär-Streams direkt in XML-Dateien speichern können, mit CDATA, oder kommentieren Sie es aus, oder etwas?Verwenden Sie CDATA, um binäre Rohdatenströme zu speichern?
Antwort
Sie können es als CDATA speichern, aber es besteht das Risiko, dass einige Bytefolgen gültige XML-Daten auswerten, die den CDATA-Abschnitt schließen. Nach einem kurzen Blick auf http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect, so scheint es Ihnen eine beliebige Folge von Zeichen mit Ausnahme von „]]>“ haben können. Sehen Sie sich auch what is a valid XML char an.
Das Nul-Zeichen ('\ 0' in C) ist nirgendwo in XML gültig, auch nicht als Escape-Zeichen (& # 0;).
Ich nehme an, da XML-Dateien nullterminierte sind. –
@ Jeremy: Sie sind nicht. Null ist einfach kein gültiges XML-Zeichen, wahrscheinlich wegen nullterminierter Zeichenfolgen in einer populären Programmiersprache ... – Christoph
Beachten Sie, dass der Standard darüber nicht 100% klar ist.Die Zeichenbereichsdefinitionen schließen das 0-Byte aus, aber einige andere Texte sagen, dass ein beliebiges Zeichen unter 127 gültig ist. –
XML ist ein Nur-Text-Format - verwenden Sie es nicht, um binäre Daten zu speichern. Setzen Sie die binären Blobs in separate Dateien und fügen Sie Ihrem XML ein Element hinzu, das auf diese Dateien verweist. Wenn Sie alle binären Blobs in einer einzigen Datei speichern möchten, fügen Sie ein Offset-Attribut oder etwas ähnliches hinzu.
Ja, und genau wie soll Flash eine Verbindung herstellen und rohe binäre Off-Dateien lesen? (Nur ActionScript 2) –
Geben Sie mir nicht das ByteArray- oder URLLoader-Gespräch. Dies ist nur AS2. –
@ Jeremy: und wo genau hast du das in deiner Frage angegeben? – Christoph
Nein, Sie können CDATA nicht allein zum Einfügen von Binärdaten in eine XML-Datei verwenden.
In XML1.0 (weil XML 1.1 zügiger ist, aber nicht um Kontrolle Zeichen), die folgenden Einschränkungen gelten für 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:
- illegal XML-Steuerzeichen 0x00 bis 0x20 außer neue Linien, Wagenrücklauf und Tabs
- illegal UTF-8-Sequenzen wie 0xFF oder die nicht kanonisch 0b1100000x 0b10xxxxxx 012.
Zusätzlich zu, dass in einem Standard Entitätsinhalt ohne CDATA:
- "<" und ">" Verwendung sind illegal
- "&" Verwendung eingeschränkt ist (
é
ist OK,&zajdalkdza;
ist nicht)
So CDATA ist nur ein Weg, "<", ">" und "&", durch die Einschränkung "]]>" statt zu ermöglichen. Es löst nicht die illegalen XML-, Unicode- und UTF-8-Zeichen, die das Hauptproblem darstellen.
Lösungen:
- 1. speichern binäre Daten mysql
- 2. Verwenden Sie XslCompiledTransform mit cdata-Abschnitt-Elementen
- 3. Beginnen Sie, CDATA eine brechende Änderung zu verwenden?
- 4. Wie CDATA in HTML-Dokumenten zu verwenden?
- 5. Verwenden Sie `SharedPreferences`, um Authentifizierungs-Token zu speichern
- 6. Verwenden Sie Google Drive, um Android-App-Daten zu speichern
- 7. scrapy verwenden mongodb, um Informationen zu speichern
- 8. Warum App.config verwenden, um Konfigurationsdaten zu speichern?
- 9. Wie können Sie eine xhtml-Seite in xml CDATA speichern?
- 10. Wählen Sie Verzeichnis/Ordner, um zu speichern?
- 11. Sitzung verwenden, um Cookies zu speichern und Login zu überprüfen
- 12. Speichern Sie Modelle in Ordner, verwenden Sie index.js, um sie alle zu benötigen
- 13. Speichern Sie Modelle in Ordner, verwenden Sie index.js, um sie alle zu benötigen
- 14. Verwendung von CDATA in einem anderen CDATA
- 15. Verwenden Sie CDATA-Element in XML ist anfällig oder nicht?
- 16. "Richtige" Möglichkeit, binäre Daten mit C++/STL zu speichern
- 17. Verwenden von CDATA mit WCF-REST-Starterkits
- 18. Django: Verwenden Sie LayerMapping, um ein vorhandenes Modell zu aktualisieren?
- 19. UIImageOrientation verwenden, um UIImagnetisch im Querformat zu speichern
- 20. Wie erstelle ich eine 1-Byte-Datei in JAVA, um binäre Werte zu speichern (zB: 10100011)?
- 21. Wie speichern Sie Ihre persönliche Snippets-Datenbank, um sie überall zu verwenden (Arbeit usw.)?
- 22. Anzeige speichern Klicken Sie auf die Datenbank, um PHP zu verwenden, dann öffnen Sie den Link
- 23. Verwenden Sie AWS Lambda, um Kinesis zu lesen und zu speichern S3
- 24. Welche Struktur sollte ich verwenden, um diese Objekte zu speichern?
- 25. NHibernate: Fluent Nhibernate verwenden, um untergeordnete Objekte zu speichern
- 26. Verwenden von NSUserDefaults, um ein Array von Objekten zu speichern
- 27. Welchen Datentyp sollte ich verwenden, um Geldwerte zu speichern?
- 28. Wie NSUserDefaults verwenden, um Daten zu speichern und
- 29. Was soll ich verwenden, um mehrere Bilder zu speichern?
- 30. Parcelable verwenden, um Artikel als geteilte Präferenzen zu speichern?
Bedeutet das nicht, dass Sie nicht können, da 0-8, B, C, E, F FFFE und FFFF ungültige Zeichen sind? –
Nach unten, da viele Bytefolgen nicht beibehalten werden. Mit "nicht beibehalten" meine ich, dass es nicht möglich ist, die ursprünglichen Binärdaten von CDATA-kodierten Daten wiederherzustellen. Siehe Pete's Antwort und Kommentare. – rwong
es ist viel gefährlicher, als Sie hier vorschlagen. Siehe petes Antwort ... – Phil