select only one node and move on php

只愿长相守 提交于 2019-12-13 03:56:39

问题


I have a list of songs from Echonest API with Spotify URI but it adds many more songs then I need. I only need one of them not all of them but I want to keep on doing this 20 times. So I only want to get the first track inside the node and move on to the next.

Here is the xml file I get the info from

This is the PHP I use:

<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>

回答1:


So I only want to get the first track inside the node and move on to the next.

You are describing continue - which moves to the next iteration and skips the following code in the current loop. Whereas break ends the current loop.




回答2:


You can retrieve the number of songs by counting the result:

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

This should allow to find out if the song you want to retrieve is in there. For example:

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

By using the position number inside the Xpath predicate:

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

You can directly select the node you're interested in, be it first (1) or some other number or even last (last()). See 2.4 Predicates and 4.1 Node Set Functions.

Hope this is helpful. As already commented, your question was not that clear. I hope the counting and numbered access will allow you to select the element you're looking for at least programmatically.



来源:https://stackoverflow.com/questions/14103468/select-only-one-node-and-move-on-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!