2009-03-30 11 views
2

Ich habe die folgende Datei in Visual Studio 2008 als neue XML-Datei geschrieben und meldet den folgenden Fehler. Worum handelt es sich bei der Fehlermeldung und warum sie als falsche XML-Datei behandelt wird?ungültige XML-Datei?

Hier ist die XML-Datei und zugehörige Fehlermeldung.

<?xml version="1.0" encoding="utf-8"?> 
<Foo>&#x2;</Foo> 

Error 1 Character ' ', hexadecimal value 0x2 is illegal in XML documents. XMLFile1.xml 2 6 Miscellaneous Files 

Dank in avdance, George

+0

Darf ich fragen, was Sie hier versuchen? Willst du es nur verstehen oder gibt es ein Problem, das du lösen willst? Wenn Letzteres möglich ist, können wir vielleicht etwas dazu sagen. – dommer

+0

Hallo Dommer, ich lerne XML-Serialisierung und ich traf seltsame Ausnahme, also komme ich hierher, um Gurus zu fragen. :-) – George2

+0

Sie können keine beliebigen Binärdaten in XML einfügen. Wenn Sie Bytes speichern müssen, müssen Sie eine Codierung auf Anwendungsebene wie Base64 verwenden. – bobince

Antwort

2

0x2 ist kein druckbares Zeichen.

+0

@domain, &, # und; sind in meinem Beispiel gültig, außer x2? – George2

+0

Ja. e wäre zum Beispiel in Ordnung. – dommer

+0

Haben Sie Dokumente, um diese Regel zu beweisen - XML-Datei muss druckbares Zeichen enthalten? Ich bin daran interessiert, mehr zu erfahren. – George2

9

Ihr Problem ist der Verweis auf & # x02, die im Wesentlichen zufällige Binärdaten ist, die nicht gedruckt werden können. Dies ist in XML1.0 nicht erlaubt (es ist in XML 1.1 und höher, aber es ist nicht sicher, dass Ihre .Net-Version dies auch dann erlaubt, wenn Sie XML-Versionen ändern).

+0

@Banang, 1. "binäre Referenz" - interessiert zu lernen, was ist eine "binäre Referenz", irgendwelche empfohlenen Messwerte? 2. XML könnte nur druckbare Zeichen in XML 1.0 enthalten? Haben Sie Unterlagen, um diese Regel zu beweisen? Ich bin daran interessiert, mehr zu erfahren. – George2

+0

@George: "binary reference" war ein Tippfehler, der beim Bearbeiten behoben wurde. Ich möchte sagen, dass es sich um einen Verweis auf Binärdaten handelte. ;) Ich würde empfehlen, http://www.xml.com/pub/a/2003/02/26/binaryxml.html zu betrachten. Für ein historisches Lesen von XML und Binär, würde ich vorschlagen: http: //www.xml .com/pub/a/98/07/binary/binary.html –

+0

Vergleichen Sie XML 1.1 http://www.w3.org/TR/REC-xml/#charsets mit http://www.w3.org/TR/xml11/# Zeichensätze Beachten Sie, dass Char etwas anders definiert ist. –

2

Wenn Sie Binärdaten in XML einfügen müssen, verwenden Sie den CDATA-Abschnitt. http://www.w3schools.com/XML/xml_cdata.asp

+0

Haben Sie Dokumente, um diese Regel zu beweisen? XML-Datei muss druckbares Zeichen enthalten? Ich bin daran interessiert, mehr zu erfahren. – George2

+0

Es gibt keine Regel als solche, aber wenn Sie die Datei in Internet Explorer oder ähnlichem anzeigen möchten, müssen Sie Zeichen haben, die gedruckt werden können. Denken Sie daran, dass bestimmte Zeichen wie die spitzen Klammern ('<' and '>') in einer XML-Datei eine besondere Bedeutung haben. –

+0

"Denken Sie daran, dass bestimmte Zeichen wie die spitzen Klammern ('<' and '>') in einer XML-Datei eine besondere Bedeutung haben." - Ist das mit meiner Frage verbunden? – George2

3

Schauen Sie sich die XML 1.0 specification

Insbesondere siehe die Definition der Zeichen in Abschnitt 2.2:

Char ::= #x9 | 
     #xA | 
     #xD | 
     [#x20-#xD7FF] | 
     [#xE000-#xFFFD] | 
     [#x10000-#x10FFFF] 

und die Definition von Entity-Referenzen in Abschnitt 4.1:

Charaktere Bezugnahmen auf Zeichenreferenzen müssen der Produktion für Char entsprechen.

+0

Danke Toolkit, sieht aus wie # x2 ist nicht im Bereich? – George2

4

Ich schrieb die folgende Datei in Visual Studio 2008 als eine neue XML-Datei, und es meldet den folgenden Fehler. Was ist die Fehlermeldung über und warum wird als falsche XML-Datei behandelt?

Nach den W3C XML 1.0 Specification, die nur in einem XML-Dokument erlaubt Zeichen, die unter &#x20; sind, sind die Lasche (09), Neue-Zeile (0A) und Wagenrücklauf (0D).

XML 1.1 allows almost all characters, ohne 00, ist aber sehr selten umgesetzt und man sollte eine XML-auf der Suche nach 1.1 Implementierung nicht verlassen.

Auch in der XML 1.1 Spec. es wird gesagt, dass die Verwendung der jetzt erlaubten Zeichen unter &#x20; "dringend abgeraten wird".

+0

@Dimitre, 1. Ich bin verwirrt, ob wir & Charakter in der Front hinzufügen sollten? Aus den Dokumenten habe ich die Regel nicht gesehen. 2. Ich denke in meinem Fall, & # x2 bedeutet Unicode-Zeichen, dessen Wert 2 ist, richtig? – George2

+0

@ George2 Man kann jedes Unicode-Zeichen als "Zeichenreferenz" schreiben, das heißt in der Form: & # {Zahl}; Ohne das Start-Ampersand ist dies nur eine Zeichenfolge und wird vom XML-Parser nicht als Zeichenreferenz interpretiert. –