Muchas gracias por el consejo estoy trabajando en eso de momento quite las referencias al dtd y a xsl y bueno pues ya no se me hace el bucle infinito aunke solo analize la mitad del arbol pero ya nos acercamos ^^ muchas gracias por su ayuda ^^ aun no he probado con el objeto XMLDOM ya ke no se si es compatible con Mozilla si me pueden decir se los agradeceria otra cosa ke se me ocurre al rato pruevo es cargar el documento xml con ajax pero usando tu tecnica tambien tengo que probarlo seria algo asi: miXML.load(ajaxObject.responseXML;) (me interesa mucho ke el archivo sea externo pos cuestiones de funcionalidad xD) pero bueno mando mis avances xD El html (aun no meto los scripts en un archivo script estoy acostumbrado a trabajar sobre el mismo documento asi ke todo viene plano ^^) acepto toda clase de sujerencias ya ke al estar acostumbrado a programar con el metodo del cole he creado un monton de variables globales que posiblemente sean inutiles agradeceria sujerencias.
<html> <head> <meta http-equiv="Content-Type" content="text/html"> <script language="JavaScript"> var ajaxObject = false; var _esMozilla = false; var _docXML; var _nivel; var _hijos; var _nodo; var _XMLroot; var _root; var _texto = ""; var _debugWin; var _winOpen = false; var _debug = true; var _llamada = 0; //##################### Funcion Encargada de inicializar objetos ######################## function inicializar(){ if(window.XMLHttpRequest){// si es Mozilla ajaxObject = new XMLHttpRequest; _esMozilla = true; }else if(window.ActiveXObject){//si es Internet Explorer... try {//Para exploradores Actuales ajaxObject = new ActiveXObject("Msxml2.XMLHTTP"); debug("El navegador es IE objeto creado: " + ajaxObject); }catch(e){ try{//si el explorador es antiguo ajaxObject = new ActiveXObject("Microsoft.XMLHTTP"); debug("El navegador es una version antigua de IE objeto creado: "+ ajaxObject); }catch(e){ //Codigo para error debug("Hubo un error al inicializar el objeto por favor revise la version de su explorador"); } } } } //#################### Funcion Cargar Documento ######################################## function cargarDoc(_documento,_XMLroot){ debug("Incializacion de objeto ajaxObject = " + ajaxObject); if(ajaxObject){//Si el objeto se inicializo correctamente... debug("objeto incializado correctamente procediendo a abrir archivo"); ajaxObject.open('GET',_documento,true); ajaxObject.onreadystatechange = function(){ debug("abriendo archivo ReadyState = " + ajaxObject.readyState + " status = " + ajaxObject.status); if(ajaxObject.readyState == 4 && ajaxObject.status == 200){ _docXML = ajaxObject.responseXML; debug("<span style='color: green;font-weight: bold'>############## incializando objeto XML #############</span>"); _root = _docXML.documentElement ; debug("buscando Raiz de documento XML la rais es: \"" + _root.nodeName + "\""); analizarXML(_root); } } ajaxObject.send(null); } } //################### Funcion Analizar XML ############################################ function analizarXML(_nodo){ _llamada++; debug("<span style='color: green;font-weight: bold'>############### llamada a funcion analizar XML No. "+ _llamada+" ###########</span><br>"); debug("nombre del nodo actual: <strong>'"+_nodo.nodeName + "'</strong> tipo de nodo: " + _nodo.nodeType); if(_nodo.nodeType == 1 && _nodo.hasChildNodes){ var _hijos = _nodo.childNodes; debug("_hijos.length = " + _hijos.length); for(i=0; i < _hijos.length;i++){ debug("vuelta del bucle: " + i); debug("<span style='color: green;font-weight: bold'>------ llamando funcion AnalizarXML desde bucle-----</span>"); analizarXML(_hijos[i]) } } debug("<span style='color: green;font-weight: bold'>############### terminada llamada a funcion analizar XML No. "+ _llamada +" en nodo: "+ _nodo.nodeName +"###########</span><br>"); _llamada--; } //################### Funcion Debug ################################################### function debug(_text){ if(_debug){ if(_winOpen){ _debugWin.document.writeln("<br>"+ _text + "\r"); }else{ _debugWin = window.open("_blank", "DebugWin", "height=500,width=500,scrollbars=yes"); _debugWin.document.writeln(_text + "<br>"); _winOpen = true; } } } </script> </head> <body onload="inicializar();"> <a href="#" onclick="cargarDoc('pruevaA.xml');">link</a> </body> </html> y aki les pongo el resultado de la ventana debug (nota ke cuando muestro el objeto IE no me marca nada Mozilla me marca [object]) El navegador es IE objeto creado: Incializacion de objeto ajaxObject = objeto incializado correctamente procediendo a abrir archivo abriendo archivo ReadyState = 4 status = 200 ############## incializando objeto XML ############# buscando Raiz de documento XML la rais es: "a" ############### llamada a funcion analizar XML No. 1 ########### nombre del nodo actual: *'a'* tipo de nodo: 1 _hijos.length = 2 vuelta del bucle: 0 ------ llamando funcion AnalizarXML desde bucle----- ############### llamada a funcion analizar XML No. 2 ########### nombre del nodo actual: *'a1'* tipo de nodo: 1 _hijos.length = 2 vuelta del bucle: 0 ------ llamando funcion AnalizarXML desde bucle----- ############### llamada a funcion analizar XML No. 3 ########### nombre del nodo actual: *'a1a'* tipo de nodo: 1 _hijos.length = 1 vuelta del bucle: 0 ------ llamando funcion AnalizarXML desde bucle----- ############### llamada a funcion analizar XML No. 4 ########### nombre del nodo actual: *'a1ab'* tipo de nodo: 1 ############### terminada llamada a funcion analizar XML No. 4 en nodo: a1ab########### ############### terminada llamada a funcion analizar XML No. 3 en nodo: a1a########### ############### terminada llamada a funcion analizar XML No. 2 en nodo: a1########### ############### terminada llamada a funcion analizar XML No. 1 en nodo: a########### pero bueno esto es un avance muchas gracias ^^ espero ke este mensaje nosea muy largo ^^ Saludos!!! "Ayudar a los demas puede ser una experiencia aparte de reconfortante muy didactica ya que te enfrentas a problemas y ecenarios que nunca hubieras imaginado..." -------------------------------------------------------------------------------------------------------------- Juan José Montes de Oca Arbós escribió: > Hola Final, yo me armé un ejemplo con la info que pasaste, y , siguiendo el > consejo de David Arango, coloqué el "var" en el for y el script me funcionó > perfectamente en IE 6. > > Te copio los ejemplos que armé para que puedas probarlos (yo saqué la parte > del AJAX y eliminé las referencias a los archivos DTD y a la hoja de XSLT). > > /// > ************************************************************************* > /// ESTA ES LA RUTINA MODIFICADA CON VAR PARA EL FOR. > /// ESTA EN UN ARCHIVO QUE SE LLAMA "funcionXML.js" > /// > ************************************************************************* > function analizarXML(_nodo){ > //este argumento que le pasamos equivale a la propiedad .documentElement del > archivo XML previamente cargado > //si escrivieramos _nodo.nodeName nos devolveria html (ya lo comprobe ^^) > if(_nodo.nodeType == 1 && _nodo.hasChildNodes){ > //si el nodo es de clase elemento y tiene hijos > var _hijos = _nodo.childNodes;//creamos una instancia de la > coleccion de hijos... > for(var i=0; i < _hijos.length;i++){//este bucle repite la funcion > para cada hijo > analizarXML(_hijos[i])//llamamos al primer elemento de la > coleccion tambien funciona con _hijos.item(i) > } > } else { > document.writeln (_nodo.text); > } > } > > > //// ESTA ES LA PAGINA QUE INICIA LA PRUEBA > <html> > <head> > <script src="funcionXML.js" type="text/javascript"></script> > <script language="javascript" type="text/javascript"> > function getObjectXML () { > //esta rutina crea un objeto XML. > var unXMLDoc; > unXMLDoc = new ActiveXObject("Microsoft.XMLDOM"); > unXMLDoc.async = false; > return unXMLDoc; > } > function llamarXML () { > var miXML = getObjectXML (); > var sXML = ''; > sXML += '<?xml version="1.0" encoding="UTF-8"?>'; > sXML += '<html>'; > sXML += ' <seccion>'; > sXML += ' <titulo>Titulo de ejemplo</titulo>'; > sXML += ' <subtitulo>subtitulo ejemplo</subtitulo>'; > sXML += ' <contenido>aki va el contenido y su imagen ke es > puedes ver la url del y mas texto</contenido>'; > sXML += ' </seccion>'; > sXML += ' <seccion>'; > sXML += ' <titulo>otro titulo de seccion</titulo>'; > sXML += ' <subtitulo>otro subtitulo</subtitulo>'; > sXML += ' <contenido>link</contenido>'; > sXML += ' </seccion>'; > sXML += '</html>'; > miXML.loadXML (sXML); > var _root = miXML.documentElement; > analizarXML(_root); > } > </script> > </head> > <body> > <img onclick="llamarXML ();" /> > </body> > </html> > > Espero te sirva, saludos!!! > > El día 11/07/07, Final <[EMAIL PROTECTED]> escribió: > >> Lo mando a llamar por medio de la siguiente funcion la cual es llamada a >> su >> ves desde un vinculo(esto solo para las pruevas) >> function cargarDoc(_documento,_XMLroot){ >> >> if(ajaxObject){//Si el objeto se inicializo correctamente... >> >> ajaxObject.open('GET',_documento,true); >> >> ajaxObject.onreadystatechange = function(){ >> >> if(ajaxObject.readyState == 4 && ajaxObject.status == >> 200){ >> >> _docXML = ajaxObject.responseXML; >> >> _root = _docXML.documentElement ; >> >> analizarXML(_root); >> >> } >> >> } >> >> ajaxObject.send(null); >> >> } >> >> } >> >> >> ----- Original Message ----- >> From: "Juan José Montes de Oca Arbós" <[EMAIL PROTECTED] >> >> To: "ListaJavaScript" <javaescript@scriptia.net> >> Sent: Wednesday, July 11, 2007 7:53 AM >> Subject: Re: [javaEScript] Recorrer Arbol XML >> >> >> Hola Final, >> ¿cómo estás haciendo la primer llamada a "analizarXML"? ¿Que objeto le >> estás pasando? >> >> Saludos!!! >> >> El día 10/07/07, Final <[EMAIL PROTECTED] > escribió: >> >>> Hola, bueno soy nuevo aqui y pues para empezar quiero presentarme ^^ mi >>> nombre es Rene Emmanuel Zamorano Flores o Final 2.0 xD pues bien como >>> diseñador web quise empezar a implementar nuevas funcionalidades a mis >>> paginas web, pues bien actualmente me encuentro haciendo un pequeño >>> >> script >> >>> que recorra todos los elementos (nodos) del siguiente documento XML.. >>> >>> <?xml version="1.0" encoding="UTF-8"?> >>> <!DOCTYPE html SYSTEM >>> >>> >> "file:/C:/Archivos%20de%20programa/VertrigoServ/www/pruevas_ajax/XML/sample.dtd"> >> >>> <?xml-stylesheet type="text/xsl" href="sample.xsl"?> >>> <html> >>> <seccion> >>> <titulo>Titulo de ejemplo</titulo> >>> <subtitulo>subtitulo ejemplo</subtitulo> >>> <contenido>aki va el contenido y su imagen ke es puedes ver la >>> >> url >> >>> del y mas texto</contenido> >>> </seccion> >>> <seccion> >>> <titulo>otro titulo de seccion</titulo> >>> <subtitulo>otro subtitulo</subtitulo> >>> <contenido>link</contenido> >>> </seccion> >>> </html> >>> >>> Lo que pretendo hacer es una pequeña funcion recursiva que recorra el >>> arbol que es el siguiente: >>> >>> html >>> ______________________|______________________ >>> | | >>> seccion seccion >>> _______|_________ ____________|____________ >>> | | | | | | >>> titulo subtitulo contenido titulo subtitulo >>> contenido >>> >>> La idea aqui es usar una funcion recursiva que analize el nodo actual y >>> >> si >> >>> este tiene hijos se vuelva a llamar para analizar los hijos cuando acabe >>> con >>> ellos deveria regresar esta es la funcion... >>> >>> ########## Funcion Analizar XML >>> ############################################ >>> function analizarXML(_nodo){//este argumento que le pasamos equivale a >>> >> la >> >>> propiedad .documentElement del archivo XML previamente cargado >>> //si escrivieramos _nodo.nodeName nos >>> devolveria html (ya lo comprobe ^^) >>> if(_nodo.nodeType == 1 && _nodo.hasChildNodes){//si el nodo es de >>> clase elemento y tiene hijos >>> var _hijos = _nodo.childNodes;//creamos una instancia de la >>> coleccion de hijos... >>> for(i=0; i < _hijos.length;i++){//este bucle repite la funcion >>> para cada hijo >>> analizarXML(_hijos[i])//llamamos al primer elemento de la >>> coleccion tambien funciona con _hijos.item(i) >>> } >>> } >>> } >>> >>> En teoria esta funcion deveria de funcionar revisar si el nodo es tipo >>> ELEMENT_NODE y si tiene hijos... despues con el bucle se llamaria a la >>> funcion pero con un nuevo nodo(es decir el primer hijo para la primera >>> vuelta el segundo hijo para la segunda etc etc) asi adentrandose en el >>> arbol >>> y terminando la funcion cuando no encuentre mas hijos ... pero aki esta >>> >> lo >> >>> curioso que no lo hace en su lugar se llama asi misma chorrocientas mil >>> veces... y me traba el explorador... (asi que cuidado si quieren >>> probarla...) la verdad es que ya estoy desesperado no estoy muy >>> familiarizado con JS y la verdad no se el porque de este error, algun >>> fallo >>> en la sintaxis deje pasar algo no se... espero me puedan ayudar...por >>> cierto >>> de momento todo esto solo funciona en IE aun no he echo la version para >>> >> el >> >>> Zorrito hasta que aya solucionado esto ... ya que como sabran mozilla >>> interpreta de un modo un poco diferente XML (toma los espacios como >>> >> hijos >> >>> y >>> hay que quitar estos... para que no aya problema he oido de un metodo >>> normalize pero no se si sea para eso o que tan compatible sea...) >>> >>> Bueno pues es todo... disculpen si me extendi mucho con la explicacion >>> pero queria dejar claro mi punto (espero no acavar confundiendo mas...) >>> >> y >> >>> pues de antemano les doy a todos las gracias... y pues espero que mi >>> estancia en esta lista sea buena tanto ayudando como resiviendo ayuda >>> >> que >> >>> si >>> no nos ayudamos entre nosotrso quien lo hara? xD >>> >>> Saludos!!! >>> ATT Final 2.0 >>> >>> ------------ próxima parte ------------ >>> Se ha borrado un adjunto en formato HTML... >>> URL: >>> >>> >> http://lists.scriptia.net/pipermail/javaescript-scriptia.net/attachments/20070709/74e64172/attachment.html >> >>> _______________________________________________ >>> javaEScript mailing list >>> javaEScript@scriptia.net >>> http://lists.scriptia.net/listinfo.cgi/javaescript-scriptia.net >>> >>> >> >> -- >> Juan José Montes de Oca Arbós. >> >> [EMAIL PROTECTED] >> [EMAIL PROTECTED] >> http://world5.monstersgame.es/?ac=vid&vid=58044309 >> http://www.montesoft.com.ar >> http://www.es-facil.com/ganar/alta?Id=64395956 >> ------------ próxima parte ------------ >> Se ha borrado un adjunto en formato HTML... >> URL: >> >> http://lists.scriptia.net/pipermail/javaescript-scriptia.net/attachments/20070711/b1562083/attachment.htm >> _______________________________________________ >> javaEScript mailing list >> javaEScript@scriptia.net >> http://lists.scriptia.net/listinfo.cgi/javaescript-scriptia.net >> >> _______________________________________________ >> javaEScript mailing list >> javaEScript@scriptia.net >> http://lists.scriptia.net/listinfo.cgi/javaescript-scriptia.net >> >> > > > > _______________________________________________ javaEScript mailing list javaEScript@scriptia.net http://lists.scriptia.net/listinfo.cgi/javaescript-scriptia.net