Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2009, 21:59
okram
Invitado
 
Mensajes: n/a
Puntos:
Parsear XML cargado con mootools

Saludos a todos. Seguro el tema es muy frecuente y muy básico, pero juro que he buscado e intentado toda la tarde y no he logrado dar con una solución práctica.

El problema es simple. Mediante la clase Request de Mootools obtengo un xml de la siguiente forma:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <response>
  3.     <error tipo="1">
  4.         <![CDATA[Error en la base de datos]]>
  5.     </error>
  6.     <html>
  7.         <![CDATA[<div class="error">No se pudo votar</div>]]>
  8.     </html>
  9.     <js>
  10.         <![CDATA[<script>....</script>º]]>
  11.     </js>
  12.     <redirect>www.algo.com</redirect>
  13. </response>
En resumen, lo que deseo hacer es, una vez obtenido este XML, poder en priemra instancia detectar si existe el tag <error>, lo cual indica que el proceso falló. Si existe, debo entonces obtener el valor de su atributo "tipo", y luego el contenido del nodo, para definir como proceder para cada tipo de error. Luego, lo mismo con los diferentes nodos posibles, como <html> o <redirect>.

Actualmente tengo esto (he recortado muchas partes que no importan ahora:

Código Javascript:
Ver original
  1. new Request({
  2.     method: 'get',
  3.     url: '/ajax',
  4.     data: {'id' : 561, 'request' : 'cap.votar' },
  5.     onSuccess: function(responseText, responseXML) {
  6.        
  7.         // Aqui es donde debo actuar. Deseo usar responseXML para obtener la información resultante del request
  8.  
  9.     }
  10. }).send();

Lo que hasta ahora he conseguido hacer, leyendo por aqui y por allá, es esto:

Detectar si un nodo existe o no:

Código Javascript:
Ver original
  1. if(responseXML.getElementsByTagName('error')[0]) {
  2.     // Existe
  3. } else {
  4.     // No existe
  5. }

Obtener el valor del atributo tipo:

Código Javascript:
Ver original
  1. responseXML.getElementsByTagName('error')[0].attributes.getNamedItem("tipo").nodeValue

Y finalmente, para leer el valor del nodo, según lo que leí, es diferente para IE y el resto:

Código Javascript:
Ver original
  1. // IE
  2. responseXML.getElementsByTagName('error')[0].text
  3.  
  4. // No IE
  5. responseXML.getElementsByTagName('error')[0].textContent

Básicamente esas son las 3 cosas que deseo lograr. La duda aquí es, que como evidentemente no manejo bien este tema de XML y javascript, tal vez lo estoy haciendo de un modo no muy adecuado, por lo que me gustaría que me ayuden a definir cuál sería la mejor manera de tratar esto, o si necesariamente hay que colocar código específico para distintos navegadores.

No sé si tenga que ver algo, pero como coloco en el título, el XML lo traigo usando Mootools.

Gracias!