2011-11-17 125 views
4

这让我疯狂了大约最后一个小时。我试图从Last.fm的API中解析出一些XML,我使用了大约35种不同的下面代码的排列,所有这些都失败了。我在XML解析方面真的很糟糕,哈哈。任何人都可以帮助我从PHP中的这个XML API解析第一个toptags> tag> name'name'吗? :(用PHP解析XML?

http://ws.audioscrobbler.com/2.0/?method=track.getinfo&api_key=b25b959554ed76058ac220b7b2e0a026&artist=Owl+city&track=fireflies

其中在这种情况下,^是 '电子'

现在,我只有这个

<? 
$xmlstr = file_get_contents("http://ws.audioscrobbler.com/2.0/?method=track.getinfo&api_key=b25b959554ed76058ac220b7b2e0a026&artist=Owl+city&track=fireflies"); 
$genre = new SimpleXMLElement($xmlstr); 
echo $genre->lfm->track->toptags->tag->name; 
?> 

与返回,空白,没有任何错误,这是令人难以置信的烦恼!

非常感谢你:) :) :)

任何帮助,大大,我的意思是真的,真的非常感谢! :)

+1

$ genre-> track-> toptags-> tag [0] - > name; ? – Catalin

回答

4

<tag>标记是一个数组,因此您应该使用foreach或类似构造来遍历它们。在你的情况,只是抓住了第一个应该是这样的:

<? 
$xmlstr = file_get_contents("http://ws.audioscrobbler.com/2.0/?method=track.getinfo&api_key=b25b959554ed76058ac220b7b2e0a026&artist=Owl+city&track=fireflies"); 
$genre = new SimpleXMLElement($xmlstr); 
echo $genre->track->toptags->tag[0]->name; 

还要注意,不需要<lfm>标签。

UPDATE

我觉得它更容易抢到正是我在一个SimpleXMLElement使用print_r()寻找。它会告诉你什么是数组,什么是一个简单的字符串,有什么其他的SimpleXMLElement等

+0

我爱你无法理解。非常非常感谢你。我尝试了完全相同的事情,但是直接在跟踪之前使用了lfm,这并没有奏效。非常非常感谢你! :) – Karan

2

尝试使用

$url = "http://ws.audioscrobbler.com/2.0/?method=track.getinfo&api_key=b25b959554ed76058ac220b7b2e0a026&artist=Owl+city&track=fireflies"; 
$xml = simplexml_load_file($url); 
echo $xml->track->toptags->tag[0]->name; 
+0

感谢您的回答! :)它帮助了很多! :D – Karan

+0

这将如何帮助吗? simplexml只会自己做一个file_get_contents本身(或者使用curl,不管)。最后它仍然会加载相同的XML并使用错误的标签路径。 ' - > tag->是一个数组,而不是一个标签。 –

+0

我粘贴的代码是没有数组的一个(我开始尝试大量的东西,沮丧:P file_get_contents和simplexml_load_file应该几乎做同样的事情,除了simpleXML的加载器似乎在我的服务器上运行有点慢,这就是为什么我卡住file_get_contents - 感谢您的回答:) – Karan

1

建议:插入语句回声$ xmlstr,并确保您得到从API返回

+0

噢,感谢您的建议:)我必须解析别的故障,但事故失败! :S谢谢! – Karan

1

您无需参考lfm。其实,$genre已经是lfm。试试这个:

echo $genre->track->toptags->tag->name; 
+0

感谢您的回答!我已经得到它的工作得益于第一个答案,这几乎是你的数组值为0 :)谢谢! :) – Karan

+0

是的,似乎如果不通过任何'标签'数组的索引,它会使用第一个。在这种情况下,'eletronic'。 – gustavotkg

0

如果你wan't读取XML数据请遵循这些步骤,

$ XMLURL = “你的XML URL /文件名到这里”;

try { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $xmlURL); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-type: text/xml' 
    )); 
    $content = curl_exec($ch); 
    $error = curl_error($ch); 
    curl_close($ch); 
    $obj = new SimpleXMLElement($content); 
    echo "<pre>"; 
    var_dump($obj); 
    echo "</pre>"; 
} 
catch(Exception $e){ 
    var_dump($e);exit; 
} 

您将获得整个xml文件的阵列合成器。

谢谢。