ECMAScript pour XML (E4X) est une extension de langage de programmation ajoutant un support XML natif à JavaScript. Cela se fait en fournissant un accès aux documents XML dans une forme qui semblera naturelle aux programmeurs ECMAScript. Son but est de proposer une syntaxe alternative et plus simple que les interfaces DOM pour accéder aux documents XML.
E4X est standardisé par l'Ecma International dans le standard ECMA-357 (actuellement dans sa seconde édition, de décembre 2005).
E4X est implémenté (au moins partiellement) dans SpiderMonkey (le moteur JavaScript de Gecko) et dans Rhino (moteur JavaScript écrit en Java).
Note : Dans les navigateurs basés sur Gecko 1.8 comme Firefox 1.5, E4X est déjà partiellement activé pour les auteurs de pages Web. Pour activer complètement E4X, l'élément
<script>
doit avoir le type MIME « text/javascript;e4x=1 » (c'est-à-dire avoir un attribut de la forme type="text/javascript;e4x=1"
). La différence entre les deux modes est que sans le type MIME indiquant « e4x=1 », tous les littéraux de commentaires XML/HTML au niveau déclaratif (<!--...-->
) sont ignorés afin d'assurer une rétro-compatibilité avec les astuces de masquage des scripts dans des commentaires. De plus, les sections CDATA (<![CDATA[...]]>
) ne sont pas analysées comme des littéraux CDATA (ce qui mènerait à une erreur de syntaxe JS en HTML puisque l'élément <script>
génère une section CDATA implicite, et ne peut donc pas contenir de sections CDATA explicites).
Bogues connus et limitations
- Il n'est actuellement pas possible d'accéder à un objet DOM depuis E4X (bug 270553)
- E4X ne supporte pas le traitement d'une déclaration XML (
<?xml version=...?>
) (voir bug 336551). Vous obtiendrez une erreur SyntaxError "xml is a reserved identifier" (même si le XML est une chaîne de caractères).
Solution :
var response = xmlhttprequest.responseText; // bug 270553 response = response.replace('<?xml version="1.0"?>', ""); // bug 336551 var e4x = new XML(response);
Ressources
- Consultez la liste des pages concernant E4X sur Mozilla Developer Center.
- Le standard ECMA-357 (en)
- Présentation de Brendan Eich (en)
- E4X sur faqts.com (en)