0

我有一个来自 Echonest API 和 Spotify URI 的歌曲列表,但它添加了我需要的更多歌曲。我只需要其中一个而不是全部,但我想继续这样做 20 次。所以我只想得到节点内的第一条轨道,然后继续下一条。

这是我从中获取信息的 xml 文件

这是我使用的 PHP:

<iframe src="https://embed.spotify.com/?uri=spotify:trackset:Playlist based on Rihanna:<?php 
$completeurl = "http://developer.echonest.com/api/v4/playlist/static?api_key=FILDTEOIK2HBORODV&artist=Rihanna&format=xml&results=20&type=artist-radio&bucket=tracks&bucket=id:spotify-WW"; 
$xml = simplexml_load_file($completeurl); 
$i = 1;
foreach ($xml->xpath('//songs') as $playlist) {
    $spotify_playlist = $playlist->foreign_id;
    $spotify_playlist2 = str_replace("spotify-WW:track:",'',$spotify_playlist);
    echo  "$spotify_playlist2,"; 
    if ($i++ == 10) break;
}
?>" width="300" height="380" frameborder="0" allowtransparency="true" style="float: right"></iframe>
4

2 回答 2

0

所以我只想得到节点内的第一条轨道,然后继续下一条。

您正在描述continue- 移动到下一次迭代并跳过当前循环中的以下代码。而break结束当前循环。

于 2012-12-31T15:56:33.227 回答
0

您可以通过计算结果来检索歌曲数量:

$numberOfSongsElements = count($xml->xpath('//songs'));

这应该可以确定您要检索的歌曲是否在其中。例如:

$playlistNumber = 1;
if ($playlistNumber > $numberOfSongsElements) {
    throw new Exception('Not enough <songs> elements');
}
$songsElement = $xml->xpath("//songs[$playlistNumber]");

通过使用 Xpath 谓词中的位置编号:

//songs[1]  --  abbreviated form of: //songs[position()=1]
//songs[2]
//songs[3]
...

您可以直接选择您感兴趣的节点,无论是第一个 ( 1) 还是其他数字,甚至是最后一个 ( last())。请参阅2.4 谓词4.1 节点集函数

希望这会有所帮助。正如已经评论的那样,您的问题并不那么清楚。我希望计数和编号访问将允许您至少以编程方式选择您正在寻找的元素。

于 2013-01-01T12:56:38.680 回答