PHP复制和操作XML

时间:2019-02-22 14:35:03

标签: php xml

我有一个DASH播放列表的MPD文件,并且必须读取时间,操纵数据路径并将其保存到新的xml中。

我的xml是这样的:

$xml = simplexml_load_file($introFile);
duration = $xml->Period['duration'];

我得到的持续时间是:

{{1}}

但是,使用simpleXML很难直接从其中复制某些部分并将其保存到新的xml文件中。我只需要“期间标记”中的数据,而且还必须将其设置为“ dash / 1080p_00-intro_track1_dashinit.mp4”。

我该怎么做?有没有简单的方法可以做到这一点?

1 个答案:

答案 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();