Existe una class para poder extraer datos de XML
Esta class te devuelve una matriz con todos los contenidos, gracias a las funciones array_push() y array_pop()
Código PHP:
<?
class xml {
var $matriz = array();
var $resultado;
var $informacion;
function xml($contenido) {
$this->resultado = xml_parser_create ();
xml_set_object($this->resultado,$this);
xml_set_element_handler($this->resultado, "abrir", "cerrar");
xml_set_character_data_handler($this->resultado, "info");
$this->informacion = xml_parse($this->resultado,$contenido);
xml_parser_free($this->resultado);
return $this->matriz;
}
function abrir($parser, $nombre, $atributos) {
$etiqueta = array("nombre"=>$nombre,"atributos"=>$atributos);
array_push($this->matriz,$etiqueta);
}
function info($parser, $etiqueta_info) {
if(trim($etiqueta_info)) {
if(isset($this->matriz[count($this->matriz)-1]['info'])) {
$this->matriz[count($this->matriz)-1]['info'] .= $etiqueta_info;
}
else {
$this->matriz[count($this->matriz)-1]['info'] = $etiqueta_info;
}
}
}
function cerrar($parser, $nombre) {
$this->matriz[count($this->matriz)-2]['hijo'][] = $this->matriz[count($this->matriz)-1];
array_pop($this->matriz);
}
}
?>
El uso de esta matriz es muy sencilla. Simplemente tendrías que verificar qué matriz corresponde a la información y luego imprimir.
Ejemplo:
Código PHP:
<?
$url = "http://www.linka-web.com/index.xml";
$xml_contenido = file_get_contents($url,'r');
$xml = new xml($xml_contenido);
echo '<pre>';
print_r($xml->matriz);
echo '</pre>';
?>
Lo anterior te devolvería todos los índices de la matriz, y puedes darle un uso práctico así... retomando aún el objeto $xml:
Código PHP:
<?
$xml = new xml($xml_contenido);
$etiqueta = $xml->matriz[0][hijo][0][hijo][1][nombre];
$atributos = $xml->matriz[0][hijo][0][hijo][1][atributos];
$informacion = $xml->matriz[0][hijo][0][hijo][1][info];
echo 'Etiqueta: '.$etiqueta;
echo '<br/>Atributos: '.$atributos;
echo '<br/>Información: '.$informacion;
?>
Espero que te sea de mucha utilidad como lo es para mi.