--- 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文件.

產生一個 DOMParser

new DOMParser()" 可產生DOMParser.

關於如何在Firefox外掛程式中產生DOMParser,請參考nsIDOMParser文件

解譯 XML

產生解譯物件後,請呼叫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 (如下) 則為錯誤來源.

解譯 SVG 或 HTML 文件

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 外掛程式

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

DOMParser from Chrome/JSM/XPCOM/Privileged Scope

See article here: nsIDOMParser

瀏覽器相容性

{{CompatibilityTable}}
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
XML support {{CompatChrome(1)}} {{CompatGeckoDesktop(1)}} {{CompatIE(9)}} {{CompatOpera(8)}} {{CompatSafari(3.2)}}
SVG support {{CompatChrome(4)}} {{CompatGeckoDesktop(10.0)}} {{CompatIE(10)}} {{CompatOpera(15)}} {{CompatSafari(3.2)}}
HTML support {{CompatChrome(30)}} {{CompatGeckoDesktop(12.0)}} {{CompatIE(10)}} {{CompatOpera(17)}} {{CompatSafari(7.1)}}
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
XML support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatUnknown}} {{CompatVersionUnknown}} {{CompatUnknown}}
SVG support {{CompatUnknown}} {{CompatGeckoMobile(10.0)}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
HTML support {{CompatUnknown}} {{CompatGeckoMobile(12.0)}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}

參考資料