Start · Sprachen · JavaScript · Referenz · Document.xmlEncoding

Document.xmlEncoding

Eigenschaft

Nur lesbar: liefert die Zeichenkodierung, die in der XML-Deklaration eines XML-Dokuments steht, z. B. <code>"UTF-8"</code>, oder <code>null</code>.

seit JavaScript DOM Level 3 (veraltet, im aktuellen DOM Living Sta deprecated seit ja Kategorie: webapi

Signatur

Document.xmlEncoding

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

Typ
string | null
Beschreibung
Die in der XML-Deklaration angegebene Kodierung als Zeichenkette. 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);
ISO-8859-1 (bzw. undefined in Browsern ohne Unterstützung)

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));
UTF-8

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));
UTF-8

HTML-Dokument liefert null

const htmlDoc = document.implementation.createHTMLDocument('Test');
console.log(htmlDoc.xmlEncoding ?? 'keine XML-Kodierung');
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 XMLSerializer wird die Kodierung nicht aus dieser Eigenschaft übernommen.
  • Bei HTML-Dokumenten, darunter normale Webseiten, ist der Wert immer null, sofern die Eigenschaft überhaupt existiert.