Foros del Web » Programando para Internet » Javascript »

DOM XML IFRAME no funca...

Estas en el tema de DOM XML IFRAME no funca... en el foro de Javascript en Foros del Web. Código: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Documento sin t&iacute;tulo</title> <script> function llenar(){ var arb ...
  #1 (permalink)  
Antiguo 28/08/2006, 13:55
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
DOM XML IFRAME no funca...

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<script>
function llenar(){
var arb = '<?xml version="1.0" encoding="iso-8859-1"?><caca><teta>teta</teta><cola>cola</cola><teta>teta2</teta></caca>';
window.frames.no.document.clear();
window.frames.no.document.open();
window.frames.no.document.writeln(arb);
window.frames.no.document.close();
pepe=document.getElementById('no').contentWindow.document.getElementsByTagName('teta').length;
alert(pepe);

pepa=document.getElementById('no').contentWindow.document.getElementsByTagName('teta')[0].firstChild.data;
alert(pepa);

var x = document.getElementById('no');
alert((x.contentDocument || x.contentWindow.document).documentElement.getElementsByTagName('teta')[0].firstChild.data);
}
</script>

</head>

<body onload="llenar()">
<iframe name="no" id="no"></iframe>
</body>
</html>
Porque me tira el length y no el contenido, el data ?

Saludos
__________________
Esteban Quintana
  #2 (permalink)  
Antiguo 28/08/2006, 17:28
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola monoswim

Tienes dos opciones para cargar un documento xml sin utilizar Ajax, al menos que yo conozca, con un string almacenado en una variable o cargando un documento xml.

Te pongo las dos:

Desde un string:

Código:
<div id="no" style="position: absolute; left: 30px; top: 10px; width: 200px; height: 150px; background-color: yellow;"></div>
<script language="JavaScript">
<!--
// corrige un error,  gecko y opera interpreta  como nodo de texto los espacios en blanco
function get_child_nodes(el){
	 var elem = el;
	 for (var ctrds = 0; ctrds < elem.childNodes.length; ctrds++){
	     if ((elem.childNodes[ctrds].nodeType == 3) && (!(/\S/).test(elem.childNodes[ctrds].nodeValue))) {
	         // Esta condicional se cumple si es un nodo de Texto en Blanco
	         elem.removeChild(elem.childNodes[ctrds]);
	         ctrds--;
	     }
	  }
	return elem.childNodes;
}




function xml_from_string(xml_string){
	var xmlDoc = null;
	// IE
	if (window.ActiveXObject){ 
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
		xmlDoc.loadXML(xml_string);
	}
	//apartir de Opera 8, y alguna de las ultimas versiones de Opera 7
	else if(document.implementation.createLSParser) {
		var lsp = document.implementation.createLSParser(1, null);
		var lsi = document.implementation.createLSInput();
		lsi.stringData = xml_string;
		xmlDoc = lsp.parse(lsi);
	
	}
	// gecko
	else if (document.implementation && document.implementation.createDocument) { 
		  var parser = new DOMParser();
          xmlDoc = parser.parseFromString(xml_string, "text/xml");
	
	}
	else{
	  alert("No soporta XMLDOM");
	}

   return xmlDoc;
}
function xml_caca(){
    var msgcc = get_child_nodes(xmlCaca.getElementsByTagName("caca")[0]);
    var str = "";
	for(var ctr = 0; ctr < msgcc.length; ctr++){

    	str+= msgcc[ctr].firstChild.nodeValue + "<br>";
	}
	document.getElementById("no").innerHTML = str;
}


// creamos el objecto xml
var arb = '<?xml version="1.0" encoding="iso-8859-1"?><caca><teta>teta</teta><cola>cola </cola><teta>teta2</teta></caca>';
var xmlCaca = xml_from_string(arb);
xml_caca()



//-->
</script>
Y la otra opcion es cargando el documento xml

Código:
<div id="no" style="position: absolute; left: 30px; top: 10px; width: 200px; height: 150px; background-color: yellow;"></div>
<script language="JavaScript">
<!--
// corrige un error,  gecko y opera interpreta  como nodo de texto los espacios en blanco
function get_child_nodes(el){
	 var elem = el;
	 for (var ctrds = 0; ctrds < elem.childNodes.length; ctrds++){
	     if ((elem.childNodes[ctrds].nodeType == 3) && (!(/\S/).test(elem.childNodes[ctrds].nodeValue))) {
	         // Esta condicional se cumple si es un nodo de Texto en Blanco
	         elem.removeChild(elem.childNodes[ctrds]);
	         ctrds--;
	     }
	  }
	return elem.childNodes;
}




function load_xml(uri){
	var xmlDoc = null;
	// IE
	if (window.ActiveXObject){ 
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
		xmlDoc.load(uri);
	}
	//apartir de Opera 8, y alguna de las ultimas versiones de Opera 7
	else if(document.implementation.createLSParser) {
		var ls = document.implementation.createLSParser(1, null);
		xmlDoc=ls.parseURI(uri);	
	}
	// gecko
	else if (document.implementation && document.implementation.createDocument) { 
		var xmlDoc= document.implementation.createDocument("","doc",null);
		xmlDoc.load(uri);
	}
	else{
	  alert("No soporta XMLDOM");
	}

   return xmlDoc;
}
function xml_caca(){
    var msgcc = get_child_nodes(xmlCaca.getElementsByTagName("caca")[0]);
    var str = "";
	for(var ctr = 0; ctr < msgcc.length; ctr++){

    	str+= msgcc[ctr].firstChild.nodeValue + "<br>";
	}
	document.getElementById("no").innerHTML = str;
}


// cargamos de documento xml
var xmlCaca = load_xml("caca.xml");


// Con Internet Explorer y Opera, simplemente llamar ejecutar metodo
if (window.ActiveXObject || window.opera) xml_caca();
//en Gecko, ejecutar función una vez cargado el Objeto (Documento XML)
else xmlCaca.onload = function(){xml_caca()};

//-->
</script>
Soportado por IE 5.5+, Gecko, creo que Netscape 7 ya soportaba estos métodos, y Opera 8.
No lo he probado en Konqueror y Safari, pero creo que también los soportan.


Espero que te sea útil.

Un saludo
  #3 (permalink)  
Antiguo 29/08/2006, 06:44
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Kepawe, me salvaste la vida !!!

Muy buenos ambos métodos, chaval, muy buenos...

Saludos
__________________
Esteban Quintana
  #4 (permalink)  
Antiguo 29/08/2006, 17:32
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
De nada monoswim.
Cita:
Kepawe, me salvaste la vida !!!
No será para tanto .

He comprobado en konqueror y no soporta el objeto new DOMParser(), puede que tenga otro objeto que permita parsear un documento xml, pero tiene tan poco cuota este navegador que no me he molestado en investigarlo, con el segundo script no parece que tenga problemas.

De Safari no te puede decir, ya que no tengo ningún Apple para comprobarlo, pero creo que Safari esta basado en Konqueror, así que imagino que soportará el segundo método.

De todos modos, soporta los navegadores con más cuota de mercado.

Un saludo
  #5 (permalink)  
Antiguo 29/08/2006, 18:52
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Para serte sincero, nunca tuve un cliente que no usara internet explorer, uno solo usaba netscape pero por casualidad, no tenía idea de como se enchufaba siquiera la PC...Con que funcione en IE y firefox estoy satisfecho...

A mi me gustó más el primer método, para usar el segundo prefiero ajax, no le noto mucha diferencia conceptual...Pero es porque estoy haciendo algo realmente raro, Pero si funciona como espero, me dará muchas satisfacciones...Esperemos que así sea...

Te agradezco nuevamente...
__________________
Esteban Quintana
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 03:42.