Ler Atributos XML com PHP

Ler atributos  XML com PHP

Olá, neste exemplo vamos utilizar a classe Simple Large XML Parser para ler/exibir  XML contendo atributos.

O arquivo XML é um exemplo de playlist, contendo título, album e autor, sendo que título possui os atributos: ID, Duracao e MP3 (este último seria o caminho do arquivo)

<?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>

 


<?php
// incluindo a classe
require_once('SimpleLargeXMLParser.class.php');
// seta o caminho do XML
$xml = dirname(__FILE__)."/playlist.xml";
// cria objeto
$parser = new SimpleLargeXMLParser();
// carrega XML
$parser->loadXML($xml);
// seta no parser o nó a ser listado/percorrido
$playlist = $parser->parseXML("//playlist/faixa", true);
// percorre o XML
foreach($playlist as $faixas)
{
 //percorre o nó faixa
 foreach($faixas as $faixa => $titulos)
 {
 if(isset($titulos[0]['value']['titulo']))
 {
 // armazena no objeto titulo o nó atual
 $titulo = (object) $titulos[0]['value']['titulo'];
 // adiciona o nó album no objeto titulo
 $titulo->album = $faixas['album'][0]['value']['album']['value'];
 // adiciona o nó autor no objeto titulo
 $titulo->autor = $faixas['autor'][0]['value']['autor']['value'];
 // print o valor do nó titulo
 echo $titulo->value
 . "<br />"
 // printa o atributo id do titulo
 . $titulo->attributes['id']
 . "<br />"
 // printa o atributo duracao
 . $titulo->attributes['duracao']
 . "<br />"
 // printa o atributo mp3
 . $titulo->attributes['mp3']
 . "<br />"
 // printa o nó album
 . $titulo->album
 . "<br />"
 // printa o nó autor
 . $titulo->autor
 . "<br /><br />" ;
 }
 }
}
?>

 

É isso, é bom dar um print_r($playlist) para ver a estrutura criada pelo Parser!

Download: XMLAttr
Parser : PHP Simple Large XML Parser

Voltei!!!

Este post tem 9 comentários

  1. johnnymordredjonathan

    Putz kra, sofri no mes passada pra aprender a fazer isso juntando alguns tutos teus ashuhsuash
    mas resumido assim eu consigo ver como eu fazia parecer dificil um negócio tão simples, heheh

    espero novos tutos em breve o/

  2. Adriano Fernandes

    Cara, qual a diferença entre esta classe e o método simpleXML, percebi que os dois retornam os valores em array. Há alguma diferença de desempenho? Vlw

    1. Rafael Clares

      Adriano, acredito que o desempenho seja o mesmo, os métodos disponíveis é que são diferentes. Talvez você deva ler no php.net sobre as 2; abs

  3. Gilson

    Parabéns cara salvou a pátria aqui valew!!!!!

  4. Dominus Farib

    $titulo -> attributes[‘id’]
    no SimpleXML ficaria assim:
    $titulo -> attributes() -> id
    Ou seja, caso você não queira utilizar classes à parte, o SimpleXML pode solucionar a questão de atributos do nós XML

  5. chicão

    E aí Rafael blz? Cara como poderia ler um arquivo XML dinamicamente (ou seja para qualquer XML), que tenha 2, 3 ou mais níveis? Vlw.

Deixe um comentário