Use simplexml para processar dados atom. Muitos blogs usam atom para gerar dados, mas atom usa namespace, então agora você deve especificar o identificador uniforme de recursos (URI) do namespace ao solicitar elementos nomeados e nomes locais. Outro ponto é O método xpath do simplexml não pode. consulte diretamente esta árvore xml.
A partir da versão 5.1 do PHP, o SimpleXML pode usar consultas XPath diretamente em documentos de namespace. Como de costume, os caminhos de localização XPath devem usar um prefixo de namespace, mesmo que o documento que está sendo pesquisado use o namespace padrão. A função registerXPathNamespace() associa o prefixo à URL do namespace usada nas consultas subsequentes.
A seguir está um exemplo de uso de xpath para consultar o elemento title de um documento atom:
PLAIN TEXT
CÓDIGO:
$atom = simplexml_load_file('http://www.ooso.net/index.php/feed/atom');
$atom->registerXPathNamespace('atom','http://www.w3.org/2005/Atom');
$títulos = $atom->xpath('//atom:título');
foreach($títulos como $título)
eco"<h2>". $título."</h2>";
Use simplexml para processar dados RSS
O Wordpress pode gerar fontes de dados RSS2 e também existem alguns namespaces diferentes, como dc. Um exemplo de uso de simplexml para analisar rss2:
TEXTO SIMPLES
PHP:
$ns=matriz(
'content'=>'http://purl.org/rss/1.0/modules/content/',
'wfw'=>'http://wellformedweb.org/CommentAPI/',
'dc'=>'http://purl.org/dc/elements/1.1/'
);
$artigos=array();
// passo 1: Obter feed
$blogUrl='http://www.ooso.net/index.php/feed/rss2';
$xml= simplexml_load_url($blogUrl);
// etapa 2: obter metadados do canal
$canal=array();
$canal['título'] =$xml->canal->título;
$canal['link'] =$xml->canal->link;
$canal['descrição']=$xml->canal->descrição;
$canal['pubDate'] =$xml->pubDate;
$canal['timestamp'] =strtotime($xml->pubDate);
$canal['gerador'] =$xml->gerador;
$canal['idioma'] =$xml->idioma;
// etapa 3: Obtenha artigos
foreach($xml->canal->itemas$item){
$artigo=array();
$artigo['canal']=$blog;
$artigo['título']=$item->título;
$artigo['link']=$item->link;
$artigo['comments']=$item->comentários;
$artigo['pubDate']=$item->pubDate;
$artigo['timestamp']=strtotime($item->pubDate);
$artigo['descrição']=(string)trim($item->descrição);
$article['isPermaLink']=$item->guid['isPermaLink'];
//obtém dados mantidos em namespaces
$content=$item->filhos($ns['content']);
$dc =$item->filhos($ns['dc']);
$wfw =$item->filhos($ns['wfw']);
$artigo['criador']=(string)$dc->criador;
foreach($dc->subjectas$subject)
$artigo['assunto'][]=(string)$assunto;
$artigo['content']=(string)trim($content->encoded);
$article['commentRss']=$wfw->commentRss;
//adiciona este artigo à lista
$artigos[$artigo['timestamp']]=$artigo;
}
Neste exemplo, use o método filhos para obter dados no namespace:
PLAIN TEXT
PHP:
$dc =$item->filhos($ns['dc']);