我目前正在尝试使用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文件?
答案 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());