web-dev-qa-db-fra.com

Comment lancez-vous une requête xPath dans IE11?

À un moment donné dans notre système, nous utilisons javascript pour lire une partie de XML, puis interroger ce document XML à l'aide de xPath.

Avant IE 11, IE était pris en charge avec xmldoc.selectSingleNode («// xpath/string») et les navigateurs autres que IE étaient pris en charge avec xmldoc.evaluate ( “// xpath/string”). Ces deux éléments ont renvoyé un objet similaire que nous pouvions ensuite interpréter pour extraire les données requises.

Dans IE11, aucune de ces méthodes ne semble être disponible.

Il semble que IE11 prenne en charge certains documents XML, car lorsque je lis dans le fichier xml à l'aide de l'objet DOMParser à l'aide de la méthode parseFromString, il retourne un objet que le débogueur IE11 appelle un document XMLDocument.

12
pixelmatt

Merci à @Martin Honnen pour avoir signalé que certains ActivXObjects sont toujours pris en charge dans IE11!

var doc;
try { 
    doc = new ActiveXObject('Microsoft.XMLDOM'); 
    doc.loadXML(stringVarWithXml); 
    var node = doc.selectSingleNode('//foo'); 
} catch (e) { // deal with case that ActiveXObject is not supported }

J'ai utilisé "Microsoft.XMLDOM" car il est suggéré ici qu'il s'agit d'un appel plus générique à tout analyseur xml présent sur le système, où il semble que "Msxml2.DOMDocument.6.0" échoue si cette version exacte n'est pas présente. (Nous devons prendre en charge tous les IE vers vers 6.0 chez moi!)

Cela fonctionne comme cela a toujours été le cas. Le seul problème que j'ai eu est que l'ancien commutateur que j'avais utilisé pour détecter IE par rapport aux autres navigateurs était if (typeof ActiveXObject !== "undefined") a échoué car je suppose qu'ils essaient de décourager son utilisation!

Merci à tous pour votre aide.

6
pixelmatt

Pour développer le paramètre answer de pixelmatt, certains résultats de mes tests (Win 7 64 bits avec IE11) l’ont fait pour que DOMParser fonctionne comme il le faisait dans IE9 et IE10 (dans IE11, il renvoie désormais un objet XMLDocument qui semble supporte pas les requêtes xpath?).

Il se trouve que je pourrais le faire se comporter comme dans IE10 avec la balise Meta suivante:

<meta http-equiv="X-UA-Compatible" content="IE=10" />

Résultats sans et avec méta ci-dessus: IE11 default modeIE11 in IE10 mode

Et voici les membres de XMLDocument (pour référence): enter image description here

0
pingo