internet-explorer xpath msxml xmldom dom3

DOM Level 3 XPath en Internet Explorer



internet-explorer msxml (2)

Acabo de instalar IE10 en mi Windows 7 y me he dado cuenta de que, incluso si me alegra que los XML de las solicitudes AJAX sean ahora documentos DOM compatibles, una función bastante básica como document.evaluate aún no es compatible.

Lo que es peor es que, dado que esos XML no son objetos personalizados de Microsoft IXMLDocument , los nodos ya no son compatibles con selectNodes y selectSingleNode . Al final, parece que IE10 no admite DOM Level 3 XPath o MSXML Xpath.

En serio, Microsoft? ¿Se me escapa algo?

Claro, puedo usar querySelector y querySelectorAll , pero no quiero perder un poco de compatibilidad con versiones anteriores.

De lo contrario , todavía se puede solicitar un documento MSXML utilizando esta línea

try {xhr.responseType = "msxml-document";} catch(e) {}

como se indica here , pero creo que sería bueno tratar, finalmente, con un documento DOM estándar en IE también.

Entonces, ¿hay alguna forma de usar XPath en IE10 con documentos DOM estándar?

ACTUALIZACIÓN 26/7/2013 IE11 aún no es estable, pero aún no es compatible con document.evaluate . Si no lo admite en la versión estable, dudo que alguna vez lo respalde. No hace falta decir que esto es ridículo.

Entiendo que puedes usar querySelector / All en los nodos DOM, pero no es compatible con IE9 y versiones anteriores, que todavía se usan con bastante frecuencia, y de todos modos XPath es más poderoso que los selectores.

Afortunadamente (si puede decir eso), aún puede establecer xhr.responseType = "msxml-document" . Por un momento, temí que ya no pudieras hacer eso ...

ACTUALIZACIÓN 23/11/2013 IE11 es estable ahora pero, por desgracia, no es compatible con document.evaluate . Como los documentos XML pesados ​​se utilizan cada vez menos en aplicaciones web a favor de JSON u otros formatos de notación ligera, esto se está convirtiendo en un problema menor, pero aún así.

Establecer la propiedad responseType aún proporciona documentos XML heredados, por lo que no se pierde nada, supongo. Sin embargo, no sé si eso seguirá siendo cierto para IE12.

ACTUALIZACIÓN 15/8/2015 Suena ridículo en este momento, pero Edge ahora es compatible con document.evaluate . Justo cuando (casi) todo cambió a JSON para el intercambio de datos. Bueno, será mejor tarde que nunca, supongo.


Es parte de Microsoft Edge build 10240+: modern.ie:DOM Level 3 XPath

El IE Dev Channel tiene una compilación que puedes usar para previsualizarla:

Está utilizando wicked-good-xpath internamente:

Para soportar WGX sin contaminar el contexto de una página web, creamos un motor de script separado y separado dedicado a WGX. Con algunas modificaciones a WGX que proporcionan puntos de entrada para invocar funciones y acceder a los resultados, clasificamos los datos de la página en el motor aislado y evaluamos las expresiones con WGX. Con WGX habilitado para manejar consultas XPath nativas, vemos ganancias inmediatas de sitios que faltan contenido en nuestro nuevo motor que representa la Web moderna.

Por ahora, MSDN tiene una guía de migración que recomienda lo siguiente:

En general, intente migrar a objetos nativos y API a menos que necesite funciones como XPath / XSLT; esto puede hacerse pasando responseText a DOMParser, en lugar de usar responseXML var:

Si aún se requieren API de MSXML, se pueden actualizar las comprobaciones de funciones para verificar el tipo de nodo recibido para seleccionar la API correcta:

Referencias


Sí, todavía no hay soporte XPath en IE = /.

Para mí, la forma más confiable de usar document.evaluate en cada navegador es, por desgracia, a través de una biblioteca.

Se llama Wicked Good XPath y es una reescritura reciente creada por Google de la antigua y buena biblioteca JavaScript-XPath . He estado usando Wicked Good XPath desde el lanzamiento y me he sentido muy cómodo con él (bueno, no tanto como con un soporte XPath nativo, pero aún así).