Ich analysiere eine XML-Datei mit Sax Parser of Xerces.
Ist die XML-Deklaration <?xml version="1.0" encoding="UTF-8"?>
erforderlich?
xml
xml-declaration
Eros
quelle
quelle
Antworten:
In XML 1.0, die XML - Deklaration ist optional . Siehe Abschnitt 2.8 der XML 1.0-Empfehlung , in dem es heißt, dass es "verwendet werden sollte" - was bedeutet, dass es empfohlen, aber nicht obligatorisch ist. In XML 1.1 ist die Deklaration jedoch obligatorisch . Siehe Abschnitt 2.8 der XML 1.1-Empfehlung , in dem "MUSS" verwendet werden muss. Es geht sogar noch weiter , dass , wenn die Erklärung nicht vorhanden ist, dass das Dokument automatisch impliziert ein XML 1.0 - Dokument ist.
Beachten Sie, dass in einer XML-Deklaration die
encoding
undstandalone
beide optional sind. Nur dasversion
ist obligatorisch. Dies sind auch keine Attribute. Wenn sie also vorhanden sind, müssen sie in dieser Reihenfolge sein:version
gefolgt von einemencoding
, gefolgt von einemstandalone
.Wenn Sie die Codierung nicht auf diese Weise angeben, versuchen XML-Parser zu erraten, welche Codierung verwendet wird. Die XML 1.0-Empfehlung beschreibt eine Möglichkeit, wie die Zeichenkodierung automatisch erkannt werden kann . In der Praxis ist dies kein großes Problem, wenn die Eingabe als UTF-8, UTF-16 oder US-ASCII codiert ist. Die automatische Erkennung funktioniert nicht, wenn 8-Bit-Codierungen auftreten, die Zeichen außerhalb des US-ASCII-Bereichs verwenden (z. B. ISO 8859-1). Vermeiden Sie diese, wenn möglich.
Das
standalone
gibt an, ob das XML-Dokument ohne DTD korrekt verarbeitet werden kann oder nicht. Leute benutzen es selten. Heutzutage ist es schlecht, ein XML-Format zu entwerfen, in dem Informationen ohne DTD fehlen.Aktualisieren:
Ein Fehler "Prologfehler / ungültige utf-8-Codierung" zeigt an, dass die tatsächlichen Daten, die der Parser in der Datei gefunden hat, nicht mit der Codierung übereinstimmen, die in der XML-Deklaration angegeben ist. In einigen Fällen stimmten die Daten in der Datei nicht mit der automatisch erkannten Codierung überein.
Da Ihre Datei eine Byte-Order-Mark (BOM) enthält, sollte sie in UTF-16-Codierung vorliegen. Ich vermute, dass Ihre Erklärung besagt,
<?xml version="1.0" encoding="UTF-8"?>
was offensichtlich falsch ist, wenn die Datei von NotePad in UTF-16 geändert wurde. Die einfache Lösung besteht darin, das zu entfernenencoding
und einfach zu sagen<?xml version="1.0"?>
. Sie können es auch bearbeiten, um zu sagen,encoding="UTF-16"
aber das wäre falsch für die Originaldatei (die nicht in UTF-16 enthalten war) oder wenn die Datei irgendwie wieder in UTF-8 oder eine andere Codierung geändert wird.Versuchen Sie nicht, die Stückliste zu entfernen - das ist nicht die Ursache des Problems. Die Verwendung von NotePad oder WordPad zum Bearbeiten von XML ist das eigentliche Problem!
quelle
Die XML-Deklaration ist optional, sodass Ihre XML-Datei ohne sie deklariert ist. Es wird jedoch empfohlen, es zu verwenden, damit die Parser keine falschen Annahmen treffen, insbesondere was die verwendete Codierung betrifft.
quelle
Dies ist nur erforderlich, wenn Sie nicht die Standardwerte für
version
und verwendenencoding
(in diesem Beispiel).quelle