--- title: DOMParser slug: Web/API/DOMParser tags: - DOMParser SVG XML translation_of: Web/API/DOMParser ---
{{APIRef("DOM")}}{{SeeCompatTable}}
DOMParser可以將XML或是HTML格式的字串轉成DOM 文件. DOMParser的規格請參閱DOM解譯與串流化.
請注意XMLHttpRequest解譯的是URL連結內容裡的XML與HTML文件.
" new DOMParser()" 可產生DOMParser.
關於如何在Firefox外掛程式中產生DOMParser,請參考nsIDOMParser文件
產生解譯物件後,請呼叫parseFromString方法函式來將XML字串轉換成DOM物件:
var parser = new DOMParser(); var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
請注意如果解譯過程出錯,目前的DOMParser不會丟出異常物件(exception),但是會回傳一個錯誤文件(請看程式臭蟲{{Bug(45566)}}):
<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml"> (error description) <sourcetext>(a snippet of the source XML)</sourcetext> </parsererror>
解譯錯誤也會記錄在錯誤終端機中(Error Console), 紀錄裡頭的文件URI (如下) 則為錯誤來源.
DOMParser也可以用來解譯 SVG 文件 {{geckoRelease("10.0")}} 或是 HTML 文件 {{geckoRelease("12.0")}}. 可以依 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"); // 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
* 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));
See article here: nsIDOMParser