DOMParser
Experimental: Dies ist eine experimentelle Technologie
Da diese Technologie noch nicht definitiv implementiert wurde, sollte die Browserkompatibilität beachtet werden. Es ist auch möglich, dass die Syntax in einer späteren Spezifikation noch geändert wird.
Der DOMParser kann XML oder HTML aus einem String in ein DOM-Document parsen. Der DOMParser ist spezifiziert in DOM Parsing and Serialization.
XMLHttpRequest unterstützt das parsen von XML- und HTML-Dokumenten auf die über eine URL zugegriffen wird.
DOMParser erzeugen
Um einen neuen DOMParser
zu erzeugen benutze einfach new DOMParser()
.
Für mehr Informationen über das Erstellen von einem DOMParser
in einer Firefox-Erweiterung, konsultiere die nsIDOMParser
-Dokumentation.
XML parsen
Nachdem du einmal ein Parser-Objekt erzeugt hast, kannst du XML-Strings mit der parseFromString
-Methode parsen.
const parser = new DOMParser();
const doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
Fehlerbehandlung
Beachte dass derzeit keine Exception ausgelöst wird, wenn es beim Ausführen des Parser-Prozesses zu einem Fehler kommen sollte. Stattdessen wird ein Fehler-Dokument (s.a. Bug 45566) ausgelöst:
<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">
(error description)
<sourcetext>(a snippet of the source XML)</sourcetext>
</parsererror>
Die Parsing-Fehler werden auch in der Error-Console, zusammen mit dem Dokument-URl als Fehlerquelle ausgegeben (s.u.).
Ein SVG- oder HTML-Dokument parsen
Der DOMParser
beherrscht auch SVG (Firefox 10.0 / Thunderbird 10.0 / SeaMonkey 2.7) und HTML (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9). Es gibt drei mögliche Ergebnisse, die mit der Übergabe eines MIME-Typen ausgewählt werden können. Ist der MIME-Typ text/xml
, ist das resultierende Dokument ein XMLDocument
, ist er image/svg+xml
, wird ein SVGDocument
zurückgegeben und für text/html
erhält man ein HTMLDocument
.
const xmlDoc = new DOMParser().parseFromString(stringContainingXMLSource, "application/xml");
// returns a Document, but not a SVGDocument nor a HTMLDocument
const svgDoc = new DOMParser().parseFromString(stringContainingXMLSource, "image/svg+xml");
// returns a SVGDocument, which also is a Document.
const htmlDoc = new DOMParser().parseFromString(stringContainingHTMLSource, "text/html");
// returns a HTMLDocument, which also is a Document.
DOMParser HTML-Erweiterung für andere Browser
/* inspiriert von https://gist.github.com/1129031 */
/*global document, DOMParser*/
(function(DOMParser) {
"use strict";
const proto = DOMParser.prototype;
const nativeParse = proto.parseFromString;
// Firefox/Opera/IE werfen bei unbekannten Typen Fehler
try {
// WebKit gibt bei bei unbekannten Typen `null` zurück
if (new DOMParser().parseFromString("", "text/html")) {
// text/html wird unterstützt
return;
}
} catch (ex) {}
proto.parseFromString = function(markup, type) {
if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
const doc = document.implementation.createHTMLDocument("");
if (markup.toLowerCase().includes('<!doctype')) {
doc.documentElement.innerHTML = markup;
} else {
doc.body.innerHTML = markup;
}
return doc;
} else {
return nativeParse.apply(this, arguments);
}
};
}(DOMParser));
Den DOMParser im Chrome/JSM/XPCOM/Privileged-Scope aufrufen
Siehe nsIDOMParser
Browser-Kompatibilität
Feature | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
XML support | (Ja) | (Ja) | ? | (Ja) | ? |
SVG support | ? | 10.0 (10.0) | ? | ? | ? |
HTML support | ? | 12.0 (12.0) | ? | ? | ? |