SimpleXML не очень хорош для создания чистого XML, когда речь идет о пространствах имен, хотя вы добавляете элементы немного некорректно ...
$media = $item->addChild('media:content', null , 'media');
третий параметр должен быть URI, а не префиксом...
$media = $item->addChild('media:content', null , "http://search.yahoo.com/mrss/");
Вторая часть (хотя и должна быть сделана первой) - это как добавить пространство имен.Как только пространство имен определено «должным образом» в иерархии XML, SimpleXML может не объявлять его повторно, но, поскольку способ, которым оно добавлено в данный момент с использованием addAttribute()
, фактически не объявляет его, больше добавляется атрибут с параметром...
$xml->addAttribute("xmlns:xmlns:media" ,"http://search.yahoo.com/mrss/");
Чтобы подделать это, добавьте атрибут к корневому элементу с новым требуемым пространством имен, а затем удалите его.К счастью, SimpleXML не очищает объявление, и теперь оно установлено для всего документа ...
$xml->addAttribute("media:a", "temp", "http://search.yahoo.com/mrss/");
unset($xml->attributes("media", true)["a"]);
Вы также можете удалить последнюю замену ...
echo $xml->asXML($page_name.'-2.xml'));