Ich analysiere eine XML-Datei mit Sax Parser of Xerces.
Ist die XML-Deklaration <?xml version="1.0" encoding="UTF-8"?>
erforderlich?
Ich analysiere eine XML-Datei mit Sax Parser of Xerces.
Ist die XML-Deklaration <?xml version="1.0" encoding="UTF-8"?>
erforderlich?
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
und standalone
beide optional sind. Nur das version
ist obligatorisch. Dies sind auch keine Attribute. Wenn sie also vorhanden sind, müssen sie in dieser Reihenfolge sein: version
gefolgt von einem encoding
, gefolgt von einem standalone
.
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
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 entfernen encoding
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!
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.