DOMParser - 提供了将 XML 或 HTML 源代码从字符串解析为 DOM Document 的功能

DOMParser 接口提供了将 XML 或 HTML 源代码从字符串解析为 DOM Document 的功能。

注意: XMLHttpRequest 可以直接从 URL 可寻址资源解析 XML 和 HTML,其返回的 response 属性时一个 Document

您可以使用 XMLSerializer 接口执行相反的操作 - 将 DOM 树转换为 XML 或 HTML 源。

对于 HTML 文档,您还可以通过设置 Element.innerHTMLouterHTML 属性的值, 将部分 DOM 替换为从 HTML 构建的新 DOM 树。还可以读取这些属性以获取对应于相应 DOM 子树的 HTML 片段。

创建 DOMParser

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

解析 XML

一旦创建了解析器对象,就可以使用 parseFromString() 方法从字符串中解析 XML:

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

错误处理

请注意,如果解析过程失败, DOMParser 不会抛出异常,而是返回错误文档:

<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">
(错误说明)
<sourcetext>(源 XML 的片段)</sourcetext>
</parsererror>

解析错误也会报告给错误控制台,文档 URI(见下文)将作为错误的来源。

解析 SVG 或 HTML 文档

DOMParser 也可用于解析 SVG 文档 (Firefox 10.0 / Thunderbird 10.0 / SeaMonkey 2.7) 或 HTML 文档 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9)。可能有三种不同的结果,由给定的 MIME 类型选择。如果 MIME 类型是 text/xml,结果对象将是 XMLDocument,如果 MIME 类型是 image/svg+xml,它将是 SVGDocument,如果 MIME 类型是 text/html,它将是一个HTMLDocument

var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
// 返回一个 Document,而不是返回 SVGDocument 或 HTMLDocument

parser = new DOMParser();
doc = parser.parseFromString(stringContainingSVGSource, "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";

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

规范

规范 状态 备注
DOM Parsing and Serialization
DOMParser 的定义
工作草案 初始定义

桌面浏览器兼容性

特性 Chrome Edge Firefox Internet Explorer Opera Safari
基础支持 1 支持 1 9 8 3.2
DOMParser() constructor 1 支持 1 9 8 3.2
parseFromString 1 支持 1 9 8 3.2
parseFromString: XML (application/xml) support 1 支持 1 9 8 3.2
parseFromString: SVG (image/svg+xml) support 4 支持 10 10 15 3.2
parseFromString: HTML (text/html) support 30 支持 12 10 17 9.1

移动浏览器兼容性

特性 Android Chrome for Android Edge mobile Firefox for Android IE mobile Opera Android iOS Safari
基础支持 支持 未知 支持 支持 未知 支持 未知
DOMParser() constructor 支持 未知 支持 支持 未知 支持 未知
parseFromString 支持 未知 支持 支持 未知 支持 未知
parseFromString: XML (application/xml) support 支持 未知 支持 支持 未知 支持 未知
parseFromString: SVG (image/svg+xml) support 未知 未知 支持 10 未知 支持 未知
parseFromString: HTML (text/html) support 未知 未知 支持 14 未知 未知 未知

相关链接