廃止
警告: E4X は廃止されました。 この機能は、Firefox 17 において content 向けにはデフォルトで無効となり、Firefox 20 では chrome 向けにもデフォルトで無効となる予定です。 そして、Firefox 21 において削除される予定となっています。 代わりに、DOMParser/DOMSerializer や非ネイティブの JXON アルゴリズムを使用してください。
ECMAScript for XML (E4X) は、ネイティブ XML サポートを JavaScript に追加するプログラミング言語拡張です。これは ECMAScript プログラマにとって違和感がない形で XML 文書にアクセスできるようにするものです。DOM インタフェースを介するよりも簡潔な、XML 文書にアクセスするための新しい構文を実現することが目標です。
E4X は ECMA-357 標準(2005 年 12 月現在、第二版)で Ecma International によって標準化されています。
E4X は SpiderMonkey(Gecko の JavaScript エンジン)および Rhino (Java で書かれた JavaScript エンジン) で(少なくとも部分的に)実装されています。
注意:Firefox 1.5 など、Gecko 1.8 ベースのブラウザでは、既にウェブページ作者向けに E4X が部分的に有効化されています。E4X を完全に有効化するには
<script>
要素に "text/javascript;e4x=1" という MIME タイプを持たせる必要があります(すなわち type="text/javascript;e4x=1"
という形式の属性を持たせる)。2 つのモードの違いは、"e4x=1" がない MIME タイプではあらゆるステートメントレベルの XML/HTML コメントリテラル (<!--...-->
) が、スクリプト部分をコメントアウトする手法との後方互換性のために無視されることです。さらに CDATA セクション (<![CDATA[...]]>
) は CDATA リテラルとしてパースされません(HTML の <script>
要素は暗黙の CDATA セクションを作りますが、そこには明示的な CDATA セクションを含めることができないため、これは HTML において JS 構文エラーを引き起こします )。
既知のバグと制限
- 今のところ E4X を通じて DOM オブジェクトにアクセスすることができない (バグ 270553)
- E4X は XML 宣言 (
<?xml version=...?>
) のパースをサポートしていない (バグ 336551)。(XML が文字列であっても) 構文エラー "xml is a reserved identifier" が起こるでしょう。
回避方法:
var response = xmlhttprequest.responseText; // bug 270553 response.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""); // bug 336551 var e4x = new XML(response);
資料
- E4X チュートリアル
- MDC の Processing XML with E4X。
- MDC の E4X 関連ページのリストを参照。
- ECMA-357 標準 【訳注: nanto_vi 氏による私的日本語訳】
- Brendan's presentation
- faqts.com の E4X 関連ページ
- E4X quick reference at rephrase.net