Buenas,
No deberías usar etiquetas especificas para parsear el xml. Me refiero.. obtienes elementos específicos con getElementByTagName que si en un futuro cambian de nombre tendrías que modificar el código entero xD.
Los atributos se obtienen con $nodo->getAttribute('nombre'); Tendrias que obtener los nombres de todos los atributos de cada $nodo y luego obtener su valor mediante esa función.
Te he modificado un poco el code espero no te moleste
<?php
$xml= new DomDocument();
// Si no pones esto, por cada espacio blanco, salto de linea u otras parecidas
// te saldra un warning.
$xml->preserveWhiteSpace = FALSE;
$xml->load('archivo.xml');
$k= $xml->getElementsByTagName( "persona" );
// Esto obtendra los atributos de cada item los devolvera en forma de array.
function obtenerAtributos($node){
$array = NULL;
foreach($node->attributes as $attrName=>$attrNode){
$array[$attrName] = $node->getAttribute($attrName);
}
return $array;
}
foreach( $k as $v ){
// Obtenemos los atributos de la persona.
$datos['persona'] = obtenerAtributos($v);
// Comprobamos si tiene hijos.
if($v->hasChildNodes()){
// Declaramos.
$childs = $v->childNodes;
// Por cada hijo.
foreach($childs as $i){
// Guardamos su nombre en array y sus atributos.
$datos[$i->tagName] = obtenerAtributos($i);
// El valor del campo.
$datos[$i->tagName]['valor'] = $i->nodeValue;
}
}
//$auto= $v->getElementsByTagName("auto")->item(0)->nodeValue;
//$compu= $v->getElementsByTagName("computadora")->item(0)->nodeValue;
//$cel= $v->getElementsByTagName("celular")->item(0)->nodeValue;
//echo '<br>Auto: '. $auto. '<br>Computadora: '. $compu. '<br>Celular: '. $cel. '<br>';
echo '<pre>'; // Para que este mas ordenado.
print_r($datos); // Muestro el array. echo '<hr />'; // Nueva linea - Nueva persona.
}
?>
El resultado de esto.. suponiendo que el XML es el mismo que el que has puesto seria:
Array
(
[persona] => Array
(
[nombre] => pedro
[edad] => 32
[fechaNacimiento] => 19800101T10:20:00
)
[auto] => Array
(
[color] => negra
[marca] => ford
[tipo] => con caja
[valor] => Camioneta
)
[computadora] => Array
(
[color] => gris
[marca] => hp
[modelo] => pcg
[procesador] => corei5
[valor] => Portatil
)
[celular] => Array
(
[color] => negro
[modelo] => abc
[marca] => abc
[redtelefonica] => blabla
[valor] => Si
)
)
----------------------------------------------
Array
(
[persona] => Array
(
[nombre] => luis
[edad] => 22
[fechaNacimiento] => 19901210T20:08:00
)
[auto] => Array
(
[color] => negra
[marca] => ford
[tipo] => smart
[valor] => Automovil
)
[computadora] => Array
(
[color] => verde
[marca] => contpaq
[modelo] => pavilion
[procesador] => corei5
[valor] => Desktop
)
[celular] => Array
(
[color] => negro
[modelo] => abc
[marca] => abc
[redtelefonica] => blabla
[valor] => Si
)
)
Saludos