--- title: DOMParser slug: Web/API/DOMParser tags: - API - DOM - DOM Parsing - Document - HTML - HTMLDocument - MakeBrowserAgnostic - NeedsMarkupWork - Parsing - Reference - SVG - XML - XMLDocument translation_of: Web/API/DOMParser ---
{{APIRef("DOM")}}
DOMParser
インターフェイスは、 {{Glossary("XML")}} や {{Glossary("HTML")}} ソースコードを文字列から DOM の {{domxref("Document")}} に解釈する機能を提供します。
注: {{domxref("XMLHttpRequest")}} は URL で指すことができるリソースから直接 XML や HTML を解釈することができ、 Document
を {{domxref("XMLHttpRequest.response", "response")}} プロパティでを返します。
{{domxref("XMLSerializer")}} インターフェイスを使い、DOM ツリーを XML もしく HTML ソースに転換する、逆の操作を行うことができます。
HTML 文書の場合、{{domxref("Element.innerHTML")}} や {{domxref("Element.outerHTML", "outerHTML")}} プロパティの値を設定することで、HTML から構築された新しい DOM ツリーに一部分を置き換えることもできます。DOM のサブツリーに対応した HTML の要素を取り込むために、これらのプロパティを読み込むことも可能です。
let domparser = new DOMParser()
let doc = domparser.parseFromString(string, mimeType)
mimeType
引数に依存した {{domxref("Document")}} もしくは {{domxref("XMLDocument")}}。
このメソッドには 2 つの引数があります (両方とも必須):
string
mimeType
{{domxref("DOMString")}}。この文字列はメソッドの戻り値のクラスを決定します。メソッドの戻り値は下記の通りです:
mimeType |
doc.constructor |
---|---|
text/html |
{{domxref("Document")}} |
text/xml |
{{domxref("XMLDocument")}} |
application/xml |
{{domxref("XMLDocument")}} |
application/xhtml+xml |
{{domxref("XMLDocument")}} |
image/svg+xml |
{{domxref("XMLDocument")}} |
パーサーオブジェクトを作成すると、parseFromString()
メソッドを用いて 文字列から XML をパースすることができます:
let parser = new DOMParser() let doc = parser.parseFromString(stringContainingXMLSource, "application/xml")
現在は、パース処理に失敗した場合、DOMParser
は例外をスローせず、代わりにエラー文書を返すという点に注意して下さい:
<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml"> (error description) <sourcetext>(a snippet of the source XML)</sourcetext> </parsererror>
パースエラーは、ソースのエラー同様、エラーコンソール にもエラーの発生した文書の URI (後述) とともに表示されます。
DOMParser
は SVG 文書のパース {{geckoRelease("10.0")}}、そして HTML 文書のパース {{geckoRelease("12.0")}} にも用いることができます。指定された MIME type によって 3 つの異なる結果となります。
text/xml
の場合、XMLDocument
が返されます。image/svg+xml
の場合、SVGDocument
が返されます。text/html
の場合、HTMLDocument
が返されます。let parser = new DOMParser() let 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 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));
仕様書 | 状態 | 備考 |
---|---|---|
{{SpecName('HTML WHATWG', '#dom-parsing-and-serialization', 'DOM parsing')}} | {{Spec2('HTML WHATWG')}} |
{{Compat("api.DOMParser", 3)}}