Utilisez simplexml pour traiter les données atom. De nombreux blogs utilisent atom pour générer des données, mais atom utilise un espace de noms, vous devez donc maintenant spécifier l'identificateur de ressource uniforme (URI) de l'espace de noms lors de la demande d'éléments nommés et de noms locaux. Un autre point est que la méthode xpath de simplexml ne peut pas. interrogez directement cette arborescence XML.
À partir de PHP version 5.1, SimpleXML peut utiliser des requêtes XPath directement sur les documents d'espace de noms. Comme d'habitude, les chemins d'emplacement XPath doivent utiliser un préfixe d'espace de noms, même si le document recherché utilise l'espace de noms par défaut. La fonction registerXPathNamespace() associe le préfixe à l'URL de l'espace de noms utilisée dans les requêtes suivantes.
Voici un exemple d'utilisation de XPath pour interroger l'élément de titre d'un document Atom :
PLAIN TEXT
CODE:
$atom = simplexml_load_file('http://www.ooso.net/index.php/feed/atom');
$atom->registerXPathNamespace('atom','http://www.w3.org/2005/Atom');
$titres = $atom->xpath('//atom:titre');
foreach ($ titres comme $ titre)
echo"<h2>". $titre."</h2>";
Utilisez simplexml pour traiter les données RSS
Wordpress peut générer des sources de données RSS2, et il existe également différents espaces de noms, tels que DC. Un exemple d'utilisation de simplexml pour analyser rss2 :
TEXTE CLAIR
PHP :
$ns=tableau(
'content'=>'http://purl.org/rss/1.0/modules/content/',
'wfw'=>'http://wellformedweb.org/CommentAPI/',
'dc'=>'http://purl.org/dc/elements/1.1/'
);
$articles=tableau();
// étape 1 : Obtenir le flux
$blogUrl='http://www.ooso.net/index.php/feed/rss2';
$xml= simplexml_load_url($blogUrl);
// étape 2 : Obtenir les métadonnées du canal
$canal=tableau();
$channel['title'] =$xml->channel->title;
$channel['link'] =$xml->channel->link;
$channel['description']=$xml->channel->description;
$channel['pubDate'] =$xml->pubDate;
$channel['timestamp'] =strtotime($xml->pubDate);
$channel['generator'] =$xml->générateur;
$channel['langue'] =$xml->langue;
// étape 3 : Récupérer les articles
foreach($xml->canal->itemas$item){
$article=tableau();
$article['channel']=$blog;
$article['title']=$item->titre;
$article['link']=$item->link;
$article['comments']=$item->commentaires ;
$article['pubDate']=$item->pubDate;
$article['timestamp']=strtotime($item->pubDate);
$article['description']=(string)trim($item->description);
$article['isPermaLink']=$item->guid['isPermaLink'];
// récupère les données contenues dans les espaces de noms
$content=$item->enfants($ns['content']);
$dc =$item->enfants($ns['dc']);
$wfw =$item->enfants($ns['wfw']);
$article['creator']=(string)$dc->creator;
foreach($dc->subjectas$subject)
$article['sujet'][]=(string)$sujet;
$article['content']=(string)trim($content->encoded);
$article['commentRss']=$wfw->commentRss;
// ajoute cet article à la liste
$articles[$article['timestamp']]=$article;
}
Dans cet exemple, utilisez la méthode children pour obtenir des données dans l'espace de noms :
PLAIN TEXT
PHP :
$dc =$item->enfants($ns['dc']);