Por ejemplo, si tenemos una página que utiliza AJAX, que recoge la respuesta de un servidor y la trata como un documento xml, y además deseamos acceder directamente a sus nodos utilizando XPath, para rellenar o validar algunos campos; tenemos el problema de la "compatibilidad de navegadores".
var req = new XMLHttpRequest();
req.open("GET", "http://miserver/content/coordenadas.xml", false);
req.send(datos);
var xml = req.responseXML;
El contenido de la variable xml sería la siguiente estructura:
<?xml version="1.0" encoding="utf-8">
<coordenadas>
<x>12.3456</x>
<y>-4.789</y>
</coordenadas>
Para acceder al valor de x desde IE sería algo así (funciona):
var x = xml.selectSingleNode("//X").text;
Para acceder al valor de x desde Mozilla sería así (NO FUNCIONA):
var nsResolver = xml.createNSResolver
( xml.ownerDocument == null ?
xml.documentElement :
xml.ownerDocument.documentElement);
var xIterator = xml.evaluate("//X", xml, nsResolver,
XPathResult.ANY_TYPE, null );
La solución
- incorporar dentro de mi página la libreria mozXPath.js
- distinguir si estoy utilizando IE o MoRzilla
if (window.ActiveXObject){
x = xml.selectSingleNode("//X").text;
} else if (document.implementation && document.implementation.createDocument){
x = xml.getElementsByTagName("X")[0]
.selectSingleNode("text()").nodeValue;
}
No pienso decir gran cosa de la funcion evaluate, que cada cual la pruebe y la critique; a mí personalmente su documentación me ha hecho perder el tiempo.Libreria útil para utilizar selectNodes y selectSingleNode en Mozilla:
http://km0.la/js/mozXPath/
Enlaces Mozilla:
http://developer.mozilla.org/en/docs/DOM:document.evaluate
http://developer.mozilla.org/en/docs/XPathResult
http://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript
http://www.anieto2k.com/2006/12/10/usando-xpath-desde-javascript/
- FIN -
1 comment:
Umm yo conocía un navegador llamado Firefox de la empresa Mozilla... pero no uno llamado MoRzilla.
Atentamente,
Post a Comment