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