Как запустить запрос 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 mode]()
![IE11 in IE10 mode]()
И вот имена XMLDocument (для справки):
![enter image description here]()