用于回显 VLC 的 PHP 脚本现在播放 XML 属性 [英] PHP script to echo VLC now playing XML attributes

查看:20
本文介绍了用于回显 VLC 的 PHP 脚本现在播放 XML 属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在这方面搜索了一段时间,但运气不佳.我找到了大量资源,展示了如何从动态 XML 中回显数据,但我是 PHP 新手,我写的任何内容似乎都无法准确获取和打印我想要的内容,尽管从我所听到的一切来看,它应该相对容易.源 XML(位于 192.168.0.15:8080/requests/status.xml)如下:

I've been searching for a while on this and haven't had much luck. I've found plenty of resources showing how to echo data from dynamic XML, but I'm a PHP novice, and nothing I've written seems to grab and print exactly what I want, though from everything I've heard, it should be relatively easy. The source XML (located at 192.168.0.15:8080/requests/status.xml) is as follows:

<root>
  <fullscreen>0</fullscreen>
  <volume>97</volume>
  <repeat>false</repeat>
  <version>2.0.5 Twoflower</version>
  <random>true</random>
  <audiodelay>0</audiodelay>
  <apiversion>3</apiversion>
  <videoeffects>
  <hue>0</hue>
  <saturation>1</saturation>
  <contrast>1</contrast>
  <brightness>1</brightness>
  <gamma>1</gamma>
  </videoeffects>
  <state>playing</state>
  <loop>true</loop>
  <time>37</time>
  <position>0.22050105035305</position>
  <rate>1</rate>
  <length>168</length>
  <subtitledelay>0</subtitledelay>
  <equalizer/>
  <information>
  <category name="meta">
  <info name="description">
  000003EC 00000253 00000D98 000007C0 00009C57 00004E37 000068EB 00003DC5 00015F90 00011187
  </info>
  <info name="date">2003</info>
  <info name="artwork_url"> file://brentonshp04/music%24/Music/Hackett%2C%20Steve/Guitar%20Noir%20%26%20There%20Are%20Many%20Sides%20to%20the%20Night%20Disc%202/Folder.jpg
  </info>
  <info name="artist">Steve Hackett</info>
  <info name="publisher">Recall</info>
  <info name="album">Guitar Noir &amp; There Are Many Sides to the Night Disc 2
  </info>
  <info name="track_number">5</info>
  <info name="title">Beja Flor [Live]</info>
  <info name="genre">Rock</info>
  <info name="filename">Beja Flor [Live]</info>
  </category>
  <category name="Stream 0">
  <info name="Bitrate">128 kb/s</info>
  <info name="Type">Audio</info>
  <info name="Channels">Stereo</info>
  <info name="Sample rate">44100 Hz</info>
  <info name="Codec">MPEG Audio layer 1/2/3 (mpga)</info>
  </category>
  </information>
  <stats>
  <lostabuffers>0</lostabuffers>
  <readpackets>568</readpackets>
  <lostpictures>0</lostpictures>
  <demuxreadbytes>580544</demuxreadbytes>
  <demuxbitrate>0.015997290611267</demuxbitrate>
  <playedabuffers>0</playedabuffers>
  <demuxcorrupted>0</demuxcorrupted>
  <sendbitrate>0</sendbitrate>
  <sentbytes>0</sentbytes>
  <displayedpictures>0</displayedpictures>
  <demuxreadpackets>0</demuxreadpackets>
  <sentpackets>0</sentpackets>
  <inputbitrate>0.016695899888873</inputbitrate>
  <demuxdiscontinuity>0</demuxdiscontinuity>
  <averagedemuxbitrate>0</averagedemuxbitrate>
  <decodedvideo>0</decodedvideo>
  <averageinputbitrate>0</averageinputbitrate>
  <readbytes>581844</readbytes>
  <decodedaudio>0</decodedaudio>
  </stats>
  </root> 

我要写的是一个简单的 PHP 脚本,它与艺术家的名字相呼应(在这个例子中是 Steve Hackett).实际上,我希望它与艺术家、歌曲和专辑相呼应,但我相信,如果我向我展示如何检索其中一个,我可以自己找出其余部分.

What I'm trying to write is a simple PHP script that echoes the artist's name (In this example Steve Hackett). Actually I'd like it to echo the artist, song and album, but I'm confident that if I'm shown how to retrieve one, I can figure out the rest on my own.

我的脚本中实际上似乎有效的部分如下.我已经尝试了比下面更多的方法,但我遗漏了我知道的一些事实不起作用.

What little of my script which actually seems to work goes as follows. I've tried more than what's below, but I left out the bits that I know for a fact aren't working.

<?PHP
$file = file_get_contents('http://192.168.0.15:8080/requests/status.xml');
$sxe = new SimpleXMLElement($file);

foreach($sxe->...

echo "Artist: "...

?>

我想我需要使用 foreachecho,但我不知道如何以打印之间的内容 那些信息括号.

I think I need to use foreach and echo, but I can't figure out how to do it in a way that will print what's between those info brackets.

如果我遗漏了任何东西,我很抱歉.我不仅是 PHP 的新手,而且我也是 StackOverflow 的新手.我在其他项目中引用了这个网站,它总是非常有帮助,所以提前感谢您的耐心和帮助!

I'm sorry if I've left anything out. I'm not only new to PHP, but I'm new to StackOverflow too. I've referenced this site in other projects, and it's always been incredibly helpful, so thanks in advance for your patience and help!

////////完成的工作脚本 - 感谢 Stefano 和所有帮助过的人!

////////Finished Working Script - Thanks to Stefano and all who helped!

<?PHP
$file = file_get_contents('http://192.168.0.15:8080/requests/status.xml');
$sxe = new SimpleXMLElement($file);

$artist_xpath = $sxe->xpath('//info[@name="artist"]');
$album_xpath = $sxe->xpath('//info[@name="album"]');
$title_xpath = $sxe->xpath('//info[@name="title"]');


$artist = (string) $artist_xpath[0];
$album = (string) $album_xpath[0];
$title = (string) $title_xpath[0];


echo "<B>Artist: </B>".$artist."</br>";
echo "<B>Title: </B>".$title."</br>";
echo "<B>Album: </B>".$album."</br>";
?>

推荐答案

代替使用 for 循环,您可以获得与 XPath:

Instead of using a for loop, you can obtain the same result with XPath:

// Extraction splitted across two lines for clarity
$artist_xpath = $sxe->xpath('//info[@name="artist"]');
$artist = (string) $artist_xpath[0];
echo $artist;

您必须调整 xpath 表达式(即适当更改 @name=...),但您明白了.还要注意 [0] 是必要的,因为 xpath 将返回一个匹配数组(你只需要第一个)和演员 (string) 用于提取节点中包含的文本.

You will have to adjust the xpath expression (i.e. change @name=... appropriately), but you get the idea. Also notice that [0] is necessary because xpath will return an array of matches (and you only need the first) and the cast (string) is used to extract text contained in the node.

此外,由于 <info name="album"> 标签中出现文字 &,您的 XML 无效,将被解析器拒绝.

Besides, your XML is invalid and will be rejected by the parser because of the literal & appearing in the <info name="album"> tag.

这篇关于用于回显 VLC 的 PHP 脚本现在播放 XML 属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆