Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/09/2007, 03:48
Tigervlc
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Flash + PHP: Flash no me importa bien los datos XML

Offrenbaruna, he puesto la línea de código que dices, pero sigue pasando.

He conseguido localizar dónde tengo el error, pero no me explico por qué. De hecho es algo realmente raro:

Si defino los nodos <entrada> de XML con solo dos atributos, id y nombre, Flash me lee todo el árbol. En cuanto defino más de dos atributos (añadir los apellidos), me lee sólo el nodo raíz <agenda>.

Os pongo el código fuente (formateo Actionscript como PHP para que salga coloreado):

Actionscript:

Código PHP:
...
listado_bd = new XML();
listado_bd.ignoreWhite 1;

crear_listado = function(listado) {
    
// Bucle para cada entrada del listado
    
var hijos listado.firstChild.childNodes;
    var 
numHijos hijos.length;
    
trace (listado " HIJOS: " numHijos); // si los hijos tienen solo como atrib. id y nombre, dan 2, y listado se muestra completamente, si tiene más atributos, da 0 hijos, y listado solo muestra <agenda />.
    
for (i=0i<numHijosi++) {
        var 
id hijos[i].attributes.id;
        var 
nombre hijos[i].attributes.nombre;
                
// falta ampliar funcionalidad cuando arregle el error
    
}
};

listado_bd.onLoad = function(exito) {
    if (
exito) {
        
_root.createEmptyMovieClip("contenedor"10);
        
contenedor._x 30;
        
contenedor._y 110;
        
// Función de creación de los elementos de lista
        
crear_listado(this);
    } else {
        
detalle.htmlText "Error al cargar entradas";
    }
};

listado_bd.load("http://localhost/......../mostrar_datos_xml.php"); 

PHP:

Código PHP:
<?
..
$bd conectar();

// Parte de la izquierda de la agenda: mostrar el listado
if (!isset($_GET["id"])) {
    
$consulta "SELECT id, nombre, apellido1, apellido2 FROM agenda";
    
$resultado consulta($bd$consulta);
    if (
$resultado->num_rows 0) { // Se han obtenido entradas. Mostrarlas en formato XML
        
$salida =  "<?xml version='1.0' encoding='UTF-8'?>\n<agenda>\n";
        while (list(
$id$nombre$apellido1$apellido2) = $resultado->fetch_array()) {
            
$salida .= "\t<entrada id=\"$id\" nombre=\"$nombre\"";
// Dependiendo de si elimino las dos siguientes lineas o no, la cosa funciona o no. También he probado a hacerlo sin el if y tampoco va:
            
if ($apellido1 != NULL$salida .= " apellido1=\"$apellido1\"";
            if (
$apellido2 != NULL$salida .= " apellido2=\"$apellido2\"";
            
$salida .= " />\n";
        }    
        
$salida .= "</agenda>";    
    } else {
        
$salida "<agenda></agenda>";
    }
    echo 
$salida;
    
$resultado->close();
    
$bd->close();
// Parte de la derecha: mostrar detalles de la entrada seleccionada
} else { 
.......
}
?>
Espero vuestra ayuda!