PHP - 创建VLC播放列表

时间:2014-05-01 14:12:32

标签: php xml simplexml vlc

我目前正在尝试使用PHP创建VLC播放列表。这适用于SimpleXML,但有一点我被卡住了。 VLC播放列表需要一个起始标记,如:

<?xml version="1.0" encoding="UTF-8"?>

但Simple XML总是在整个元素周围创建一个xml标签,看起来像

<xml>
    <tag></tag>
</xml>

但我需要的是:

<?xml version="1.0" encoding="UTF-8"?>
<playlist xmlns="[...]" xmlns:vlc="[...]" version="1"> 
    <title>Test<title>
    <trackList>
        [...]
    </trackList>
</playlist> 

如何使用simpleXML创建这样的xml文件?

2 个答案:

答案 0 :(得分:2)

您错过了一些关于XML的细节,这些细节会让您误入歧途。让我们说清楚:

  

VLC播放列表需要一个起始标记,如:

     

<?xml version="1.0" encoding="UTF-8"?>

这在很多方面都是错误的。首先,这是一个起始标记。这就是所谓的XML Declaration。所以它不是一个起始标签,而是一些不同的东西。

其次,VLC不要求这样做。 XML声明是可选的,因此适用于VLC。

  

但Simple XML总是在整个元素周围创建一个xml标签,看起来像

不,Simple XML正在处理这个问题。它不会在整个元素周围创建一个xml标记。 所做的事实上是错误的,导致错误的结果。但在这种情况下,这不是SimpleXML的错,而是你的错(你没有共享代码,所以请原谅我在这里做的概括)。

然后你问如何使用SimpleXML创建一些XML文件。通过您分享的(小)信息,可以这样:

$playlist = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><playlist xmlns="uri:1" xmlns:vlc="uri:2" version="1"/>');
$playlist->title = 'Test';
$playlist->trackList = "[...]";
$playlist->asXML('php://output');

输出是:

<?xml version="1.0" encoding="utf-8"?>
<playlist xmlns="uri:1" xmlns:vlc="uri:2" version="1"><title>Test</title><trackList>[...]</trackList></playlist>

如果您希望打印得漂亮,请参阅此处:PHP simpleXML how to save the file in a formatted way?

答案 1 :(得分:0)

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><playlist></playlist>');
$trackList = $xml->addChild('trackList');
foreach ($_POST['files'] as $video) {
    $track = $trackList->addChild('track');
    $track->addChild('location', 'file://'.$tmp_dir.'/'.$video['path']);
    $track->addChild('title', $video['name']);
}
file_put_contents('playlist.xspf',$xml->asXML());