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!!!
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/
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
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
Parabéns cara salvou a pátria aqui valew!!!!!
$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
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.
Chicão, deu uma olhada no outro post http://blog.clares.com.br/ler-atributos-xml-extendendo-a-classe-simplexmlelement/ ?
De toda forma é ideal que sejam conhecidos os campos/nós do XML para a leitura.
amigo eu to sofrendo aqui querendo colocar em meu site uma extrutura de xml montada em php ou html mas nao consigo nada que faça isso funcionar… sera que alguem me ajudaria?? quero abrir esse xml http://www.apostilasopcao.com.br/xml-afiliados/xml-auto-afi-4639-abertos.xml em php ou html no meu site como faço?? grato marcelo brad
Um desses posts resolve seu problema
http://blog.clares.com.br/category/xml/