0

我试图从一个软件生成的 XML 文件中提取几个属性,但我没有运气。

到目前为止我的代码看起来像这样;

$xml_feed_url = 'http://localhost/rest/getNowPlaying.view?u=USERNAMEt&p=PASSWORD&v=1.8.0&c=test';  
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $xml_feed_url);  
curl_setopt($ch, CURLOPT_HEADER, false);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
$xml = curl_exec($ch);  
curl_close($ch); 
echo $xml;

此代码成功输出以下 XML 文件;

<?xml version="1.0" encoding="UTF-8"?>
<subsonic-response xmlns="http://subsonic.org/restapi" status="ok" version="1.8.0">  
  <nowPlaying>  
    <entry id="1805" parent="1798" title="Too Close" album="The Lateness Of The Hour" artist="Alex Clare" isDir="false" coverArt="1798" created="2012-05-22T13:12:29" duration="256" bitRate="320" track="4" discNumber="1" year="2011" genre="Pop" size="10283678" suffix="mp3" contentType="audio/mpeg" isVideo="false" path="Alex Clare/The Lateness Of The Hour/Alex Clare - Too Close.mp3" albumId="50" artistId="14" type="music" username="RestClient" playerId="8" minutesAgo="0"/>  
    <entry id="33664" parent="33642" title="Hot Ride" album="Always Outnumbered, Never Out Gunned" artist="The Prodigy" isDir="false" coverArt="33642" created="2012-05-10T00:31:16" duration="276" bitRate="128" track="5" discNumber="1" year="2004" genre="Other" size="5135448" suffix="mp3" contentType="audio/mpeg" isVideo="false" path="The Prodigy/Always Outnumbered, Never Out Gunned/The Prodigy - Hot Ride.mp3" albumId="2064" artistId="635" type="music" username="Revenant" playerId="6" playerName="test" minutesAgo="3"/>  
  </nowPlaying>  
</subsonic-response>

我能够使用 foreach 循环(如下)成功提取特定属性,但我希望从一个用户而不是全部提取特定的多个属性。

foreach($xml->children()->children() as $second_gen){  
echo "User: ".$second_gen['username'];  
echo "Artist: ".$second_gen['artist'];  
echo "Title: ".$second_gen['title'];  
echo "Album: ".$second_gen['album'];

任何想法,将不胜感激。谢谢。

4

1 回答 1

0

使用 simple_xml 和 XPath 怎么样?

就像是...

$username='Revenant';
$xml->registerXPathNamespace("n", "http://subsonic.org/restapi");
$result=$xml->xpath("//n:entry[@username='$username']/@title | //n:entry[@username='$username']/@album | //n:entry[@username='$username']/@artist");

echo "$result[0] by $result[2] on the album $result[1]";

使用 PHP 5.4.4 测试

于 2013-02-07T17:30:09.613 回答