{{APIRef("DOM")}}{{SeeCompatTable}}
DOMParser
can parse XML or HTML source stored in a string into a DOM Document. DOMParser
is specified in DOM Parsing and Serialization.
Note that XMLHttpRequest supports parsing XML and HTML from URL-addressable resources.
Creating a DOMParser
To create a DOMParser
object simply use new DOMParser()
.
For more information about creating a DOMParser
in Firefox extensions, please see the documentation for nsIDOMParser
.
Parsing XML
Once you have created a parser object, you can parse XML from a string using the parseFromString
method:
var parser = new DOMParser(); var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
Error handling
Note that if the parsing process failed, DOMParser
currently does not throw an exception, but instead returns an error document (see {{Bug(45566)}}):
<parsererror xmlns="https://www.mozilla.org/newlayout/xml/parsererror.xml"> (error description) <sourcetext>(a snippet of the source XML)</sourcetext> </parsererror>
The parsing errors are also reported to the Error Console, with the document URI (see below) as the source of the error.
Parsing an SVG or HTML document
The DOMParser
can also be used to parse a SVG document {{geckoRelease("10.0")}} or a HTML document {{geckoRelease("12.0")}}. There are three different results possible, selected by the MIME type given. If the MIME type is text/xml
, the resulting object will be an XMLDocument
, if the MIME type is image/svg+xml
, it will be an SVGDocument
and if the MIME type is text/html
, it will be an HTMLDocument
.
var parser = new DOMParser(); var doc = parser.parseFromString(stringContainingXMLSource, "application/xml"); // returns a Document, but not a SVGDocument nor a HTMLDocument parser = new DOMParser(); doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml"); // returns a SVGDocument, which also is a Document. parser = new DOMParser(); doc = parser.parseFromString(stringContainingHTMLSource, "text/html"); // returns a HTMLDocument, which also is a Document.
DOMParser HTML extension for other browsers
/* inspired by https://gist.github.com/1129031 */ /*global document, DOMParser*/ (function(DOMParser) { "use strict"; var proto = DOMParser.prototype , nativeParse = proto.parseFromString ; // Firefox/Opera/IE throw errors on unsupported types try { // WebKit returns null on unsupported types if ((new DOMParser()).parseFromString("", "text/html")) { // text/html parsing is natively supported return; } } catch (ex) {} proto.parseFromString = function(markup, type) { if (/^\s*text\/html\s*(?:;|$)/i.test(type)) { var doc = document.implementation.createHTMLDocument("") ; if (markup.toLowerCase().indexOf('<!doctype') > -1) { doc.documentElement.innerHTML = markup; } else { doc.body.innerHTML = markup; } return doc; } else { return nativeParse.apply(this, arguments); } }; }(DOMParser));
DOMParser from Chrome/JSM/XPCOM/Privileged Scope
See article here: nsIDOMParser
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
XML support | {{CompatChrome(1)}} | {{CompatGeckoDesktop(1)}} | {{CompatIE(9)}} | {{CompatOpera(8)}} | {{CompatSafari(3.2)}} |
SVG support | {{CompatChrome(4)}} | {{CompatGeckoDesktop(10.0)}} | {{CompatIE(10)}} | {{CompatOpera(15)}} | {{CompatSafari(3.2)}} |
HTML support | {{CompatChrome(30)}} | {{CompatGeckoDesktop(12.0)}} | {{CompatIE(10)}} | {{CompatOpera(17)}} | {{CompatSafari(7.1)}} |
Feature | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
XML support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatUnknown}} |
SVG support | {{CompatUnknown}} | {{CompatGeckoMobile(10.0)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
HTML support | {{CompatUnknown}} | {{CompatGeckoMobile(12.0)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |