DOMParser

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

DOMParser 可以将存储在字符串中的XML或HTML源代码解析为一个 DOM文档. DOMParser是在 DOM解析和序列化 中指定的。

请注意, XMLHttpRequest  支持从URL可寻址资源解析XML和HTML。

创建一个DOMParser

要创建一个DOMParser对象,只需使用 new DOMParser().

有关在Firefox扩展中创建一个DOMParser的更多信息,请参阅 nsIDOMParser的文档 。

解析 XML

一旦建立了一个解析对象以后,你就可以使用它的parseFromString方法来解析一个XML字符串:

let parser = new DOMParser(),
    doc = parser.parseFromString(stringContainingXMLSource, "application/xml");

错误处理

如果解析失败, DOMParser 目前不会抛出任何异常, 只会返回一个给定的错误文档(查看 bug 45566):

<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">
(error description)
<sourcetext>(a snippet of the source XML)</sourcetext>
</parsererror>

解析错误会显示在错误控制台,包括文档的地址和错误的源代码.

解析SVG或者HTML文档

DOMParser也可以用来解析一个SVG文档(Firefox 10.0 / Thunderbird 10.0 / SeaMonkey 2.7)或者HTML文档 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9). 根据给定的MIME类型不同,parseFromString方法可能返回三种不同类型的文档.如果MIME类型是 text/xml, 则返回一个XMLDocument, 如果MIME类型是 text/svg+xml,则返回一个 SVGDocument, 如果MIME类型是 text/html, 则返回一个HTMLDocument.

let parser = new DOMParser();
let doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
// 返回一个Document对象,但不是SVGDocument也不是HTMLDocument对象
parser = new DOMParser();
doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml");
// 返回一个SVGDocument对象,同时也是一个Document对象.
parser = new DOMParser();
doc = parser.parseFromString(stringContainingHTMLSource, "text/html")
// 返回一个HTMLDocument对象,同时也是一个Document对象.

对其他浏览器的DOMParser HTML扩展

/*
 * DOMParser HTML extension
 * 2012-09-04
 *
 * By Eli Grey, http://eligrey.com
 * Public domain.
 * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
 */
/*! @source https://gist.github.com/1129031 */
/*global document, DOMParser*/
(function(DOMParser) {
	"use strict";
	let DOMParser_proto = DOMParser.prototype,
	    real_parseFromString = DOMParser_proto.parseFromString;
	// Firefox/Opera/IE 在不支持的类型上抛出错误
	try {
		// 到不支持的类型,WebKit会返回null
		if ((new DOMParser).parseFromString("", "text/html")) {
			// text/html的解析原生支持
			return;
		}
	} catch(ex){}
	DOMParser_proto.parseFromString = function(markup, type) {
		if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
			let doc = document.implementation.createHTMLDocument("");
			doc.body.innerHTML = markup;
			return doc;
		} else {
			return real_parseFromString.apply(this, arguments);
		}
	};
}(DOMParser));

在 Chrome/JSM/XPCOM/Privileged 作用域下的 DOMParser

见此文章: nsIDOMParser

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
XML support 1 1.0 (1.7 or earlier) 9 8 3.2
SVG support 4 10.0 (10.0) 10 15 3.2
HTML support 30 12.0 (12.0) 10 17 7.1
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
XML support (Yes) (Yes) ? (Yes) ?
SVG support ? 10.0 (10.0) ? ? ?
HTML support ? 12.0 (12.0) ? ? ?

相关链接

文档标签和贡献者