Foros del Web » Programando para Internet » Javascript »

Leer xml en Firefox

Estas en el tema de Leer xml en Firefox en el foro de Javascript en Foros del Web. Hola tengo el siguiente código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original if ( navigator. appName == "Microsoft Internet Explorer" ) {     var ...
  #1 (permalink)  
Antiguo 06/03/2011, 13:18
Avatar de FantasmaFito  
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 118
Antigüedad: 16 años, 10 meses
Puntos: 0
Leer xml en Firefox

Hola tengo el siguiente código:

Código Javascript:
Ver original
  1. if (navigator.appName == "Microsoft Internet Explorer"){
  2.     var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  3. }else{
  4.     var xmlDoc = document.implementation.createDocument("","",null);
  5. }
  6.  
  7. function loadXML(xmlFile){
  8.   xmlDoc.async="false";
  9.   xmlDoc.onreadystatechange=verify;
  10.   xmlDoc.load(xmlFile);
  11.   xmlObj=xmlDoc.documentElement;
  12. }
  13.  
  14. function verify(){
  15.   if (xmlDoc.readyState != 4){
  16.       return false;
  17.   }
  18. }
  19.  
  20. loadXML('clima.xml');
  21.  
  22. var tmpActual = xmlObj.childNodes(3).childNodes(2).firstChild.text;
  23.  
  24. document.writeln(tmpActual);

En IE anda perfecto, lee el xml y me muestra lo que le pido, el problema es en Firefox que no me muestra nada. Ya busque en google, pero encuentro que con var xmlDoc=document.implementation.createDocument(""," ",null); para Firefox ya funciona, sin embargo la realidad es que a mi no me anda

¿Alguien que sepa un poco más sobre xml me podría dar una mano u orientarme un poco?

Gracias!!!
  #2 (permalink)  
Antiguo 06/03/2011, 14:20
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Leer xml en Firefox

buenas...

fijate el valor que le has asignado a la propiedad async. el valor no es un boolean false sino true puesto que le has asignado un string con una longitud mayor a cero. de momento ese es el unico detalle fallido.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 06/03/2011, 14:23
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Leer xml en Firefox

pregunto. por que no usar window.DOMParser??

pd: vaya tarde
  #4 (permalink)  
Antiguo 06/03/2011, 14:30
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Leer xml en Firefox

@isabelm,

fiajte que DOMParser requiere analizar un string para convertirlo en un documento xml. de modo que de alguna forma tiene que traer el contenido, ya sea incrustrandolo directamente en el script o mediante una peticion. al menos yo encuentro menos problematico utilizar XHR o documentCreate para cargar un archivo xml.

hace unas semanas un miembro trajo una consulta de un problema que tiene firefox al analizar un string xml con DOMParser donde firefox trunca los nodos tipo texto a una longitud fija. aca el tema en cuestion, http://www.forosdelweb.com/showthread.php?t=887945.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 06/03/2011, 14:32
Avatar de FantasmaFito  
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 118
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Leer xml en Firefox

Cita:
Iniciado por zerokilled Ver Mensaje
buenas...

fijate el valor que le has asignado a la propiedad async. el valor no es un boolean false sino true puesto que le has asignado un string con una longitud mayor a cero. de momento ese es el unico detalle fallido.

Pero le pongo true y tampoco pasa nada. El firebug me tira xmlObj is null.

¿Y como es eso del window.DOMParser?
  #6 (permalink)  
Antiguo 06/03/2011, 14:37
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Leer xml en Firefox

no lo estas entendiendo. false no es lo mismo que "false". el primero es un boolean mientras que el segundo es un string. la propiedad async requiere un boolean. si se le asigna un valor que no es boolean, este sera convertido a boolean de acuerdo a su tipo y valor. en el caso de los string, si la cadena es vacia se convierte en un boolean false. lo contrario sucede cuando el string contiene mas de un caracter. a continuacion una muestra.

Código:
alert(Boolean(false)); // false;
alert(Boolean("false")); // true;
alert(Boolean("")); // false;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 06/03/2011, 14:54
Avatar de FantasmaFito  
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 118
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Leer xml en Firefox

Cita:
Iniciado por zerokilled Ver Mensaje
no lo estas entendiendo. false no es lo mismo que "false". el primero es un boolean mientras que el segundo es un string. la propiedad async requiere un boolean. si se le asigna un valor que no es boolean, este sera convertido a boolean de acuerdo a su tipo y valor. en el caso de los string, si la cadena es vacia se convierte en un boolean false. lo contrario sucede cuando el string contiene mas de un caracter. a continuacion una muestra.

Código:
alert(Boolean(false)); // false;
alert(Boolean("false")); // true;
alert(Boolean("")); // false;
Si si, capte eso, pero le puse xmlDoc.async=false; y no hay caso...
  #8 (permalink)  
Antiguo 06/03/2011, 15:02
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Leer xml en Firefox

pues solo queda decirte que a mi me funciono perfectamente en firefox. si tienes firebug, en esta misma pagina de forosdelweb, ejecuta lo siguiente. el codigo carga el documento RSS y muestra en la consola el elemento raiz. notese que tiene un pequeño retardo porque primero tiene que cargar antes de continuar el script.
Código:
doc = document.implementation.createDocument("","",null);
doc.async = false;
doc.load("http://www.forosdelweb.com/external.php?type=RSS2");
doc.documentElement;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 06/03/2011, 15:07
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Leer xml en Firefox

Cita:
Iniciado por zerokilled Ver Mensaje
@isabelm,

fiajte que DOMParser requiere analizar un string para convertirlo en un documento xml. de modo que de alguna forma tiene que traer el contenido, ya sea incrustrandolo directamente en el script o mediante una peticion. al menos yo encuentro menos problematico utilizar XHR o documentCreate para cargar un archivo xml.
lo he probado y tienes razón, como siempre
  #10 (permalink)  
Antiguo 06/03/2011, 15:18
Avatar de FantasmaFito  
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 118
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Leer xml en Firefox

Zerokilled, te puedo pedir un último favor. Podras entrar aqui http://desarrollo.idear-estudio.com.ar/xml/leer.html y decirme si te muestra algo en Firefox. Tenes la version 3.6.15??

Gracias.
  #11 (permalink)  
Antiguo 06/03/2011, 15:31
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Leer xml en Firefox

¡vaya torpe error! me enfoque mas en el tema de cargar el documento y aparte el resto. el documento carga bien, lo que pasa es que estas haciendo referencia incorrectamente a los elementos. tienes problema en la siguiente linea.
Código:
var tmpActual = xmlObj.childNodes(3).childNodes(2).firstChild.text;
childNodes no es una funcion sino un NodeList y para accesar a la lista debes usar corchetes y no parentesis. si quieres usar parentesis deberias usar la funcion item de los NodeList el cual es exactamente lo mismo que la anterior alternativa.

por cierto, considero conveniente utilizar XMLHttpRequest en lugar de createDocument si quieres mantener compatibilidad entre los navegadores. en chrome, createDocument crea un objeto document pero no con la misma interfaz que firefox. es decir, no existe la funcion load ni la propiedad async.

pd: firefox 3.6.3 es mi version.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #12 (permalink)  
Antiguo 06/03/2011, 15:39
Avatar de FantasmaFito  
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 118
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Leer xml en Firefox

Cita:
Iniciado por zerokilled Ver Mensaje
¡vaya torpe error! me enfoque mas en el tema de cargar el documento y aparte el resto. el documento carga bien, lo que pasa es que estas haciendo referencia incorrectamente a los elementos. tienes problema en la siguiente linea.
Código:
var tmpActual = xmlObj.childNodes(3).childNodes(2).firstChild.text;
childNodes no es una funcion sino un NodeList y para accesar a la lista debes usar corchetes y no parentesis. si quieres usar parentesis deberias usar la funcion item de los NodeList el cual es exactamente lo mismo que la anterior alternativa.

por cierto, considero conveniente utilizar XMLHttpRequest en lugar de createDocument si quieres mantener compatibilidad entre los navegadores. en chrome, createDocument crea un objeto document pero no con la misma interfaz que firefox. es decir, no existe la funcion load ni la propiedad async.

pd: firefox 3.6.3 es mi version.
Jaja, es increible pero tampoco va, me dice xmlObj.childNodes[3].childNodes[2].firstChild is null En IE anda bien tanto con paréntesis como con corchetes...
  #13 (permalink)  
Antiguo 06/03/2011, 16:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Leer xml en Firefox

sucede que iexplorer no analiza los nodos de la misma forma que firefox o cualquier otro navegador. fijate que iexplorer ignora los nodos tipo TextNode que no contengan caracteres imprimibles. en cambio, lo correcto seria que dichos nodos se crearan. o sea, childNodes[3] no hace referencia al mismo elemento en iexplorer y firefox. tienes dos formas de como corregirlo, la mas facil siendo el uso de la funcion getElementsByTagName. a juzgar por el valor de los indices, asumo que queras obtener el texto dentro de la etiqueta <tmp>. por tanto...
Código:
xmlObj.getElementsByTagName("tmp")[0].firstChild.nodeValue;
// indice 0 porque segun el documento existe un solo elemento <tmp> ;
la otra alternativa consiste en evitar crear TextNode "sin contenido" al escribir o crear el documento xml. para que tengas una idea de lo que me refiero.
Código xml:
Ver original
  1. <parent>     <child>content</child></parent>

fijate que hay una separacion entre el elemento <parent> y <child>. esa separacion se considera un TextNode compuesto -en este caso- especificamente por espacios. en el caso de iexplorer, el nodo <parent> tendria un nodo hijo, mientras que los navegadores estandar tendrian dos hijos para el mismo nodo. entonces, para evitarlo, habria que escribir el documento si ese tipo de separacion.

Código xml:
Ver original
  1. <parent><child>content</child></parent>

ahora iexplorer tendria la misma cantidad de nodos hijos que los demas navegadores. ciertamente es complejo tener que escribir un documento de esa forma porque entonces casi todo terminaria en varias lineas y seria ilegible el cual es importante para depurar/actualizar el documento. una tecnica que puedes adoptar seria introducir el salto de linea dentro de la declaracion del elemento.

Código xml:
Ver original
  1. <parent
  2. ><child>content</child
  3. ></parent>

conclusion: es menos complicado utilizar getElementsByTagName a diferencia de las ultimas alternativas.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 06/03/2011 a las 16:11
  #14 (permalink)  
Antiguo 06/03/2011, 16:21
Avatar de FantasmaFito  
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 118
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Leer xml en Firefox

Bueno he usado getElementsByTagName y todo barbaro!!

Gracias zerokilled , realmente me has dado muchisima ayuda, ya me estaba desesperando...

Etiquetas: firefox, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:51.