我有一个DASH播放列表的MPD文件,并且必须读取时间,操纵数据路径并将其保存到新的xml中。
我的xml是这样的:
$xml = simplexml_load_file($introFile);
duration = $xml->Period['duration'];
我得到的持续时间是:
{{1}}
但是,使用simpleXML很难直接从其中复制某些部分并将其保存到新的xml文件中。我只需要“期间标记”中的数据,而且还必须将其设置为“ dash / 1080p_00-intro_track1_dashinit.mp4”。
我该怎么做?有没有简单的方法可以做到这一点?
答案 0 :(得分:0)
SimpleXML在复制这样的数据方面并不是特别擅长,但是DOMDocument可以使其变得非常简单。
假设您要复制<Period>
节点,请使用getElementsByTagName()
来获取源$doc
中的所有匹配标签。它首先将该节点从源导入到新的XML文件($new
)中,对于每个节点,它还查看<BaseURL>
标签并在所有这些标签上循环,并添加新部分部分。然后,将这个新操作的节点添加到新文档的根元素中(您可以在$new->loadXML('<?xml vers...
行中调整根节点)...
$doc = new DOMDocument();
$doc->load($url);
$new = new DOMDocument();
$new->loadXML('<?xml version="1.0"?><MPD xmlns="urn:mpeg:dash:schema:mpd:2011" />');
$copy = $doc->getElementsByTagName("Period");
foreach ( $copy as $period ) {
$copyNode = $new->importNode($period, true);
$baseURLs = $copyNode->getElementsByTagName("BaseURL");
foreach ( $baseURLs as $baseURL ) {
$baseURL->nodeValue = "dash/".$baseURL->nodeValue;
}
$new->documentElement->appendChild($copyNode);
}
echo $new->saveXML();