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=0; i<numHijos; i++) {
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!