DOMParser - 提供了将 XML 或 HTML 源代码从字符串解析为 DOM Document 的功能
DOMParser
接口提供了将 XML 或 HTML 源代码从字符串解析为 DOM Document
的功能。
注意:
XMLHttpRequest
可以直接从 URL 可寻址资源解析 XML 和 HTML,其返回的response
属性时一个Document
。
您可以使用 XMLSerializer
接口执行相反的操作 - 将 DOM 树转换为 XML 或 HTML 源。
对于 HTML 文档,您还可以通过设置 Element.innerHTML
和 outerHTML
属性的值, 将部分 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 | 未知 | 未知 | 未知 |