2016-04-22 14 views
0

schrieb ich Code, der Daten von http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml, wie man Daten aus XML-Apfel rss

for($i = 0; $i < 10; $i++){ 

    $title = $xml->entry[$i]->title; // work 
    $name = $xml->entry[$i]->im:name; //does not work 

    $html .= "<br />$title<hr />";} echo $html; 

Das Problem ist im .I bekommen kann keine Daten davon bekommen. Wie kann ich es lösen?

+0

http : //stackoverflow.com/questions/595946/parse-xml-with-namespace-using-simplexml – Ghost

+0

es mit '$ xml- versuchen> Eintrag [$ i] -> { 'im: name'}' –

+0

Danke für Ihre Antwort, aber es funktioniert nicht Ich bekomme ein leeres Ergebnis – Mohammed

Antwort

0

Sie können <im:name> nicht auf diese Weise zugreifen.

im: ist ein Namespacepräfix: mit Namespaced-Tags Sie eine bestimmte Syntax verwenden müssen, um zu arbeiten.

Sie können alle Namespaces URI des Dokuments abrufen mit:

$namespaces = $xml->getDocNamespaces(); 

und Sie werden diese Anordnung erhalten:

Array 
(
    [im] => http://itunes.apple.com/rss 
    [] => http://www.w3.org/2005/Atom 
) 

Jedes Array Schlüssel ist das Namespacepräfix, jedes Array-Wert ist der Namespace-URI. Der URI mit einem leeren Schlüssel steht für den Namespace-URI des globalen Dokuments.

SimpleXML hat nicht die beste Syntax, um mit Namespaces zu arbeiten (IMO DOMDocument ist eine bessere Wahl). In Ihrem Fall haben Sie auf diese Weise zu tun:

$children = $xml->entry[$i]->children('im', True); 
echo $children->artist . '<br>'; 
echo $children->name . '<br>'; 

Ergebnis für ->entry[0]:

Prince & The Revolution 
Purple Rain 

Die ->children Sekunden Parameter True bedeuten „regard ersten Parameter als Präfix“; Als Alternative können Sie komplette Namensraum-URI auf diese Weise verwenden:

$children = $xml->entry[$i]->children('http://itunes.apple.com/rss'); 

... ♪ Ich wollte Sie lachen nur im lila regen ♪ sehen ...