Спасибо IMSoP за то, что указал мне правильное направление! Это заняло немного изучения, но решение оказалось очень простым! Вместо того, чтобы пытаться преобразовать в формат JSON, просто используйте SimpleXML. Однако из-за пространств имен для сопоставления itunes требуется дополнительная строка: префикс.
Итак, в моем фиде iTunes есть следующая строка: xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd
Так что мы просто ссылаемся на это, чтобы сделать доступ к значениям очень простым. Вот быстрый пример:
$rss = simplexml_load_file('https://podcasts.example.com/podcast.rss');
foreach ($rss->channel->item as $item){
// Now we define the map for the itunes: namespace
$itunes = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd');
// This is a value WITHOUT the itunes: namespace
$title = $item->title;
// This is a value WITH the itunes: namespace
$author = $itunes->author;
echo $title . '<br>';
echo $author . '<br>';
}
Другая небольшая проблема, с которой я столкнулся, заключается в получении таких атрибутов, как URL-адрес для изображений и звуковых ссылок. Это достигается с помощью функции attributes()
следующим образом:
// Access attributes WITH itunes: namespace
$image = $itunes->image->attributes();
// Access attributes WITHOUT itunes: namespace
$audio = $item->enclosure->attributes();
// To echo these we simple add the desired attribute in `[]`:
echo $image['href'] . '<br>';
echo $audio['url'] . '<br>';