Ver Mensaje Individual
  #8 (permalink)  
Antiguo 09/02/2008, 13:24
Avatar de Panino5001
Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: Acceder a atributos de un XML con JavaScript

En realidad, habría que definir bien qué es y que no ajax, y qué es javascript y qué no lo es. Con DOM nivel 2 es posible acceder a documentos xml vía javascript hasta en navegadores obsoletos como explorer 5 de MAC (en teoría, no lo probé), aunque extrañamente, el mismo navegador en windows sólo pueda hacerlo vía ActiveXObject. De todas formas, lo que no es necesario es utilizar el objeto XMLHttpRequest para eso, aunque es posible, por supuesto (y menciono XMLHttpRequest porque algunos lo consideran sinónimo de AJAX, cosa con la que no estoy de acuerdo, ya que ajax es una tecnología bastante más vieja que XMLHttpRequest y es posible hacer ajax con iframes, imágenes, estilos css y hasta con inclusiones DOM).
Pero bueno, aquí dejo un ejemplo de cómo acceder a un documento xml sin XMLHttpRequest (el xml, pese a estar en el mismo código, hay que pensarlo -y de hecho es así y puede comprobarse mirando el código fuente resultante- como un archivo aparte):
Código PHP:
<?php 
if(isset($_GET['xml'])){
header("Content-type: text/xml");
echo 
'<';
echo 
'?xml version="1.0" encoding="iso-8859-1"?>
<datos>
    <dato tipo="info">esto pertenece a un xml externo</dato>
</datos>
'
;
exit;
}
?>
<!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>test</title>
<script>
function importXML()
{
    if (document.implementation && document.implementation.createDocument)
    {
        xmlDoc = document.implementation.createDocument("", "", null);
        xmlDoc.onload = function(){alert('nodo del tipo: '+xmlDoc.documentElement.getElementsByTagName('dato').item(0).getAttribute('tipo')+', contenido:'+xmlDoc.documentElement.getElementsByTagName('dato').item(0).firstChild.data)};
    }
    else if (window.ActiveXObject)
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.onreadystatechange = function () {
            if (xmlDoc.readyState == 4) alert('nodo del tipo: '+xmlDoc.documentElement.getElementsByTagName('dato').item(0).getAttribute('tipo')+', contenido:'+xmlDoc.documentElement.getElementsByTagName('dato').item(0).firstChild.data)
        };
     }
    else
    {
        alert('Your browser can\'t handle this script');
        return;
    }
xmlDoc.load('?xml')
}    
</script>
</head>

<body>
<a href="javascript:importXML()">traer</a>
</body>
</html>
Adicionalmente, se muestra como acceder al valor de un atributo utilizando getAttribute.

Última edición por Panino5001; 09/02/2008 a las 13:47