DOMParser
を用いると、文字列で格納された XML / HTML / SVG のソースを document
DOM オブジェクトにパースする事が出来ます。 DOMParser
は DOM Parsing and Serialization で定義されています。
XMLHttpRequest は URL アドレスに指定可能な情報からの XML や HTML のパースをサポートしています。
DOMParser の生成
DOMParser
オブジェクトの生成は、単純に new DOMParser();
を使用します。
Firefox の拡張機能での DOMParser
の作成方法の詳細については 『nsIDOMParser
』 をご覧下さい。
XML のパース
パーサオブジェクトを作成すると、parseFromString
メソッドを用いて 文字列から XML をパースする事が出来ます。
var parser = new DOMParser(); var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
エラーのハンドリング
現在は、パース処理に失敗した場合、DOMParser
は例外をスローせず、代わりにエラー文書を返すという点に注意して下さい(※参照: バグ 45566)
<parsererror xmlns="https://www.mozilla.org/newlayout/xml/parsererror.xml"> (error description) <sourcetext>(a snippet of the source 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 type によって動作は異なります。MIME type が text/xml
の場合は XMLDocument
、 text/svg+xml
の場合は SVGDocument
、text/html
の場合は HTMLDocument
が返されます。
var parser = new DOMParser(); var doc = parser.parseFromString(stringContainingXMLSource, "application/xml"); // SVGDocument でも HTMLDocument でもなく、Document が返る parser = new DOMParser(); doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml"); // SVGDocument (Document) が返る parser = new DOMParser(); doc = parser.parseFromString(stringContainingHTMLSource, "text/html"); // HTMLDocument (Document) が返る
DOMParser 未実装ブラウザへの対応
Eli Grey 氏の次の Polyfill 、 "DOMParser HTML extension" を用いる事により、 DOMParser
が実装されていないブラウザでもこれをエミュレートする事が出来ます。
/* * DOMParser HTML extension * 2012-09-04 * * By Eli Grey, https://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 DOMParser_proto = DOMParser.prototype , real_parseFromString = DOMParser_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) {} DOMParser_proto.parseFromString = function(markup, type) { if (/^\s*text\/html\s*(?:;|$)/i.test(type)) { var doc = document.implementation.createHTMLDocument("") ; doc.body.innerHTML = markup; return doc; } else { return real_parseFromString.apply(this, arguments); } }; }(DOMParser));
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
XML のサポート | (有) | (有) | (有) | (有) | (有) |
SVG のサポート | ? | 10.0 (10.0) | ? | ? | ? |
HTML のサポート | ? | 12.0 (12.0) | ? | ? | ? |
機能 | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
XML のサポート | (有) | (有) | ? | (有) | ? |
SVG のサポート | ? | 10.0 (10.0) | ? | ? | ? |
HTML のサポート | ? | 12.0 (12.0) | ? | ? | ? |