Ler Atributos XML – Extendendo a Classe SimpleXMLElement

Ler Atributos XML – Extendendo a Classe SimpleXMLElement

Opa!

Vamos criar uma Classe Extendida para ler os atributos de um XML,  iremos extender  a SimpleXMLElement.
Para carregar o XML vamos utilizar o SimpleXml, não se assuste com tantos nomes de classes, o que precisamos fazer para ler os atributos é bem simples! 

O XML é o padrão de sempre, uma playlist…  =D

<?xml version="1.0" encoding="iso-8859-1"?>
<playlist>
 <faixa>
 <titulo id="55" duracao="04:08" mp3="http://site.com/mp3/atari/01.mp3">Revolution Action</titulo>
 <album>60 Second Wipe Out</album>
 <autor>Atari Teenage Riot</autor>
 </faixa>
 <faixa>
 <titulo id="50" duracao="03:55" mp3="http://site.com/mp3/atari/03.mp3">Speed</titulo>
 <album>60 Second Wipe Out</album>
 <autor>Atari Teenage Riot</autor>
 </faixa>
</playlist>

Extendendo a Classe SimpleXMLElement e lendo o XML

<?php
//extendendo a classe SimpleXMLElement
//neste caso a classe SimpleXMLAttribute extende a classe SimpleXMLElement
//com o novo método Attribute
class SimpleXMLAttribute extends SimpleXMLElement
{
// metodo retorna o valor do atributo
 public function Attribute( $name )
 {
 // percorre os atributos
 foreach( $this->Attributes() as $key => $val )
 {
 // verifica existencia e retorna o valor
 if( $key == $name )
 {
 //converte/retorna valor string
 return (string) $val;
 }
 }
 }
}

//carregando o XML com o simplexml passamos como parametro a classe SimpleXMLAttribute
//esse parametro deve ser uma classe que extenda o SimpleXMLElement
$xml = simplexml_load_file( "playlist.xml", 'SimpleXMLAttribute' );
//percorrendo o nó faixa da playlist
foreach( $xml->faixa as $faixa )
{
 //printando valores e atributos
 echo
 $faixa->titulo
 . "<br />"
 //retorna o atributo id passado ao método Attribute()
 . $faixa->titulo->Attribute( 'id' )
 . "<br />"
 //retorna o atributo duracao
 . $faixa->titulo->Attribute( 'duracao' )
 . "<br />"
 //ja deu para entender né
 . $faixa->titulo->Attribute( 'mp3' )
 . "<br />"
 //retorna o album
 . $faixa->album
 . "<br />"
 //retorna o autor
 . $faixa->autor
 . "<br /> <br />";
}
//descomente a linha abaixo p/ ver os atributos
//echo "<pre>"; print_r($xml->faixa); print_r($xml->faixa->titulo);
?>

Download dos fontes
Referências:
Extends
SimpleXMLElement
SimpleXML
Enjoy!!!

Comments

  1. By Eliezer

    Responder

Perguntas duplicadas ou cujo a resposta esteja nos comentários serão ignoradas.
Comentários com códigos serão ignorados(para isso, use o pastebin.com e informe aqui o link).
Faça sua pergunta e "aguarde" ser aprovada para aparecer no blog.
Aguarde sua resposta, ela não é em tempo real, tenha paciência!

Deixe seu comentário

%d blogueiros gostam disto: