Start · Sprachen · JavaScript · Referenz · XMLHttpRequest.responseXML

XMLHttpRequest.responseXML

Eigenschaft

Schreibgeschützte Eigenschaft, die die Antwort einer XHR-Anfrage als geparstes <code>Document</code> (XML oder HTML) liefert oder <code>null</code>, wenn keine gültige Antwort vorliegt.

seit JavaScript Baseline: alle Browser (in Web Workern nicht verfü Kategorie: webapi

Signatur

XMLHttpRequest.responseXML

Beschreibung

Die schreibgeschützte Eigenschaft responseXML liefert den Antwortkörper einer XMLHttpRequest-Anfrage als fertig geparstes DOM-Document. Damit kann man die Antwort direkt mit DOM-Methoden wie querySelector(), getElementsByTagName() oder evaluate() (XPath) auswerten, ohne selbst einen DOMParser zu benutzen.

Der Wert ist null, wenn die Anfrage noch nicht abgeschlossen ist (readyState ungleich 4), wenn sie fehlgeschlagen ist oder wenn sich die Antwort nicht als XML bzw. HTML parsen lässt. Ob der Browser XML parst, hängt vom Content-Type der Antwort ab (z. B. text/xml, application/xml, application/rss+xml oder …+xml). Passt der Server-Header nicht, lässt er sich vor dem Senden mit overrideMimeType('text/xml') überschreiben.

Ein HTML-Dokument bekommt man nur, wenn vor send() responseType = 'document' gesetzt wird; bei synchronen Anfragen oder leerem responseType wird HTML nicht geparst. Ist responseType weder '' noch 'document', wirft der Zugriff auf responseXML einen InvalidStateError.

Man nutzt responseXML vor allem in älterem Code oder beim Anbinden von XML-Schnittstellen wie RSS/Atom-Feeds, SOAP-Diensten oder Sitemaps. In neuem Code wird meist fetch() mit response.text() und DOMParser verwendet.

Rückgabewert

Typ
Document | null
Beschreibung
Ein XMLDocument bzw. Document mit der geparsten Antwort oder null, wenn die Anfrage nicht fertig, fehlerhaft oder nicht als XML/HTML parsebar ist.

Beispiele

RSS-Feed laden und Titel auslesen

const xhr = new XMLHttpRequest();
xhr.open('GET', '/feed.xml');

xhr.addEventListener('load', () => {
  const doc = xhr.responseXML;
  if (xhr.status !== 200 || !doc) {
    console.error('Kein gültiges XML erhalten');
    return;
  }
  const titles = [...doc.querySelectorAll('item > title')]
    .map((el) => el.textContent);
  console.log(titles);
});

xhr.send();
["Neuer Artikel", "Release 2.0", "Wartungsfenster"]

Falschen Content-Type mit overrideMimeType korrigieren

// Server liefert XML fälschlich als text/plain
const xhr = new XMLHttpRequest();
xhr.open('GET', '/api/config');
xhr.overrideMimeType('text/xml');

xhr.onload = () => {
  const doc = xhr.responseXML;
  const timeout = doc?.querySelector('timeout')?.textContent;
  console.log('Timeout:', Number(timeout));
};

xhr.send();
Timeout: 30

HTML-Seite als Document laden

const loadHtml = (url) => new Promise((resolve, reject) => {
  const xhr = new XMLHttpRequest();
  xhr.open('GET', url);
  xhr.responseType = 'document'; // nötig für HTML-Parsing
  xhr.onload = () => xhr.responseXML
    ? resolve(xhr.responseXML)
    : reject(new Error('Parsen fehlgeschlagen'));
  xhr.onerror = () => reject(new Error('Netzwerkfehler'));
  xhr.send();
});

const doc = await loadHtml('/impressum.html');
console.log(doc.title);
Impressum – Beispiel GmbH

XML-Parserfehler erkennen

const xhr = new XMLHttpRequest();
xhr.open('GET', '/daten.xml');
xhr.onload = () => {
  const doc = xhr.responseXML;
  // Manche Browser liefern bei kaputtem XML null, andere ein Fehlerdokument
  if (!doc || doc.querySelector('parsererror')) {
    console.warn('XML ist fehlerhaft');
    return;
  }
  console.log(doc.documentElement.nodeName);
};
xhr.send();
daten

// Wichtig · Fallstricke

  • Nur bei responseType '' oder 'document': Bei anderen Werten (z. B. 'json', 'blob') wirft der Zugriff einen InvalidStateError.
  • HTML nur asynchron und mit responseType = 'document': Ohne diese Einstellung ist responseXML bei HTML-Antworten null.
  • MIME-Typ entscheidet: Liefert der Server kein XML-Content-Type, ist der Wert null. Abhilfe: overrideMimeType('text/xml') vor send().
  • Parserfehler: Bei ungültigem XML kommt je nach Browser null oder ein Dokument mit <parsererror> zurück. Am besten auf beides prüfen.
  • Web Worker: In Workern gibt es kein DOM, dort ist responseXML nicht verfügbar. Stattdessen responseText verwenden.
  • Sicherheit: Geladene HTML-Dokumente sind inaktiv, Skripte darin werden nicht ausgeführt. Wer Knoten daraus per importNode() oder innerHTML ins eigene Dokument übernimmt, riskiert trotzdem XSS (z. B. über onerror-Attribute). Fremde Inhalte also vorher bereinigen. Für Anfragen an andere Ursprünge gelten die normalen CORS-Regeln.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. Für neuen Code lieber fetch() zusammen mit DOMParser nutzen.