Verwenden Sie simplexml, um Atomdaten zu verarbeiten, aber Atom verwendet einen Namespace. Daher müssen Sie jetzt den Namespace Uniform Resource Identifier (URI) angeben, wenn Sie benannte Elemente und lokale Namen anfordern. Die xpath-Methode von simplexml kann nicht Fragen Sie diesen XML-Baum direkt ab.
Ab PHP Version 5.1 kann SimpleXML XPath-Abfragen direkt für Namespace-Dokumente verwenden. Wie üblich müssen XPath-Speicherortpfade ein Namespace-Präfix verwenden, auch wenn das durchsuchte Dokument den Standard-Namespace verwendet. Die Funktion registerXPathNamespace() ordnet das Präfix der Namespace-URL zu, die in nachfolgenden Abfragen verwendet wird.
Das Folgende ist ein Beispiel für die Verwendung von xpath zum Abfragen des Titelelements eines Atomdokuments:
PLAIN TEXT
CODE:
$atom = simplexml_load_file('http://www.ooso.net/index.php/feed/atom');
$atom->registerXPathNamespace('atom','http://www.w3.org/2005/Atom');
$titles = $atom->xpath('//atom:title');
foreach($titles als $title)
echo"<h2>". $title ."</h2>";
Verwenden Sie simplexml, um RSS-Daten zu verarbeiten
Wordpress kann RSS2-Datenquellen ausgeben, und es gibt auch einige andere Namespaces, wie z. B. dc. Ein Beispiel für die Verwendung von simplexml zum Parsen von RSS2:
Klarer Text
PHP:
$ns=array(
'content'=>'http://purl.org/rss/1.0/modules/content/',
'wfw'=>'http://wellformedweb.org/CommentAPI/',
'dc'=>'http://purl.org/dc/elements/1.1/'
);
$articles=array();
// Schritt 1: Feed abrufen
$blogUrl='http://www.ooso.net/index.php/feed/rss2';
$xml= simplexml_load_url($blogUrl);
// Schritt 2: Kanalmetadaten abrufen
$channel=array();
$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->generator;
$channel['Sprache'] =$xml->Sprache;
// Schritt 3: Artikel abrufen
foreach($xml->channel->itemas$item){
$article=array();
$article['channel']=$blog;
$article['title']=$item->title;
$article['link']=$item->link;
$article['comments']=$item->comments;
$article['pubDate']=$item->pubDate;
$article['timestamp']=strtotime($item->pubDate);
$article['description']=(string)trim($item->description);
$article['isPermaLink']=$item->guid['isPermaLink'];
// Daten abrufen, die in Namespaces gespeichert sind
$content=$item->children($ns['content']);
$dc =$item->children($ns['dc']);
$wfw =$item->children($ns['wfw']);
$article['creator']=(string)$dc->creator;
foreach($dc->subjectas$subject)
$article['subject'][]=(string)$subject;
$article['content']=(string)trim($content->encoded);
$article['commentRss']=$wfw->commentRss;
// diesen Artikel zur Liste hinzufügen
$articles[$article['timestamp']]=$article;
}
In diesem Beispiel verwenden Sie die Methode „Children“, um Daten im Namespace abzurufen:
PLAIN TEXT
PHP:
$dc =$item->children($ns['dc']);