Как запустить запрос xPath в IE11?

В какой-то момент нашей системы мы используем javascript для чтения в куске XML и затем запрашиваем этот XML-документ с помощью xPath.

До IE 11 IE поддерживал использование xmldoc.selectSingleNode( "//xpath/string" ) и браузеры, не поддерживающие IE, поддерживаемые с помощью xmldoc.evaluate( "//xpath/string" ). Они оба возвратили аналогичный объект, который мы могли бы продолжить интерпретацию для извлечения необходимых данных.

В IE11 ни один из этих методов не доступен.

Кажется, что IE11 имеет некоторую поддержку XML-документов, поскольку при чтении в xml с использованием объекта DOMParser с использованием метода parseFromString он возвращает объект, который отладчик IE11 вызывает XMLDocument.

Ответ 1

Благодаря @Martin Honnen за то, что некоторые ActivXObjects по-прежнему поддерживаются в 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 }

Я использовал "Microsoft.XMLDOM", так как здесь было предложено , что это более общий вызов тому, что когда-либо синтаксический анализатор xml присутствует в системе, где поскольку это звучит так: "Msxml2.DOMDocument.6.0" потерпит неудачу, если такой точной версии нет. (Мы должны поддерживать все версии IE до версии 6.0 на моем месте!)

Это работает, как всегда. Единственная проблема, с которой я столкнулся, заключалась в том, что старый коммутатор, который я использовал для обнаружения IE и других браузеров, был if (typeof ActiveXObject !== "undefined") неудачным, поскольку я думаю, что они пытаются отговорить его использовать!

Спасибо всем за вашу помощь.

Ответ 2

Чтобы развернуть на pixelmatt answer, некоторые результаты моих тестов (Win 7 64bit с IE11) я сделал, чтобы заставить DOMParser работать как в IE9 и IE10 (в IE11 теперь он возвращает объект XMLDocument, который, как представляется, не поддерживает запросы xpath?).

Оказывается, я могу заставить его вести себя как в IE10 со следующим метатегом:

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

Результаты без и выше мета: IE11 default modeIE11 in IE10 mode

И вот имена XMLDocument (для справки): enter image description here