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
- Mejorando la interoperabilidad con DOM L3 XPath
- Tipos de objetos XML nativos y sitios web heredados
- XMLHttpRequest responseXML en la vista previa de la versión IE10
- DOMParser y XMLSerializer en IE9 Beta
- Demostración DOMParser y XMLSerializer
- Cómo incluir funciones de script del lado del cliente en un documento XSL
- Detalles para Document API - Microsoft Edge Development
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í).