Signatur
Beschreibung
Document.xmlEncoding ist eine nur lesbare Eigenschaft. Sie gibt den Wert des Attributs encoding aus der XML-Deklaration eines XML-Dokuments zurück, also z. B. "ISO-8859-1" bei <?xml version="1.0" encoding="ISO-8859-1"?>. Fehlt das Attribut oder handelt es sich um ein HTML-Dokument, ist der Wert null.
Wichtig ist der Unterschied zu document.characterSet: xmlEncoding zeigt nur, was in der Deklaration steht. Welche Kodierung der Parser tatsächlich benutzt hat, zeigt characterSet. Diese Kodierung kann zum Beispiel durch den HTTP-Header Content-Type oder eine BOM anders ausfallen.
Die Eigenschaft stammt aus DOM Level 3 Core und wurde aus dem aktuellen DOM Living Standard entfernt. Neuer Code sollte sie nicht mehr verwenden. Nutzen Sie stattdessen document.characterSet. Wenn Sie den deklarierten Wert wirklich brauchen, lesen Sie ihn selbst aus dem XML-Quelltext aus.
Rückgabewert
null, wenn keine Kodierung deklariert ist oder das Dokument ein HTML-Dokument ist. In Browsern, die die Eigenschaft nicht mehr kennen, ergibt der Zugriff undefined.Beispiele
Kodierung eines geparsten XML-Dokuments auslesen
const xml = '<?xml version="1.0" encoding="ISO-8859-1"?><katalog><artikel id="1"/></katalog>';
const doc = new DOMParser().parseFromString(xml, 'application/xml');
// In älteren Browsern mit Unterstützung: "ISO-8859-1"
console.log(doc.xmlEncoding);
Feature-Erkennung mit Rückfall auf characterSet
const getEncoding = (doc) => {
if ('xmlEncoding' in doc && doc.xmlEncoding) {
return doc.xmlEncoding;
}
// Tatsächlich verwendete Kodierung als Rückfall
return doc.characterSet;
};
console.log(getEncoding(document));
Deklarierte Kodierung ohne xmlEncoding ermitteln (zukunftssicher)
const readDeclaredEncoding = (xmlText) => {
const match = xmlText.match(/^\s*<\?xml[^>]*\bencoding\s*=\s*["']([A-Za-z0-9._-]+)["']/);
return match ? match[1] : null;
};
const response = await fetch('/feeds/news.xml');
const text = await response.text();
console.log(readDeclaredEncoding(text));
HTML-Dokument liefert null
const htmlDoc = document.implementation.createHTMLDocument('Test');
console.log(htmlDoc.xmlEncoding ?? 'keine XML-Kodierung');
// Wichtig · Fallstricke
- Veraltet: Die Eigenschaft steht nicht mehr im DOM Living Standard. Firefox hat sie schon früh entfernt (Version 10). In anderen Browsern ist sie ebenfalls nicht verlässlich verfügbar. Prüfen Sie vor dem Zugriff mit Feature-Erkennung (
'xmlEncoding' in document) und sehen Sie einen Rückfall vor. - Deklariert ist nicht gleich tatsächlich: Der Wert muss nicht mit der Kodierung übereinstimmen, mit der der Parser das Dokument gelesen hat. Maßgeblich ist
document.characterSet. - Nur lesbar: Eine Zuweisung ändert weder das Dokument noch dessen Serialisierung. Beim Serialisieren mit
XMLSerializerwird die Kodierung nicht aus dieser Eigenschaft übernommen. - Bei HTML-Dokumenten, darunter normale Webseiten, ist der Wert immer
null, sofern die Eigenschaft überhaupt existiert.