Как получить специфичные для iTunes дочерние узлы RSS-каналов?

Я пытаюсь обработать RSS-канал используя PHP и есть некоторые теги, такие как 'itunes:image' который мне нужно обработать. Код, который я использую, приведен ниже, и по некоторым причинам эти элементы не возвращают никакого значения. На выходе длина равна 0.

Как я могу прочитать эти теги и получить их атрибуты?

$f = $_REQUEST['feed'];
$feed = new DOMDocument();
$feed->load($f);
$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');

foreach($items as $key => $item)
{
$title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
$description = $item->getElementsByTagName('description')->item(0)->textContent; // textContent

$arrt = $item->getElementsByTagName('itunes:image');
print_r($arrt);
}

2

Решение

getElementsByTagName определяется DOM, а PHP просто следует за этим. Он не учитывает пространства имен. Вместо этого используйте getElementsByTagNameNS, который требует полного URI пространства имен (не префикс). это по-видимому http://www.itunes.com/dtds/podcast-1.0.dtd*. Так:

    $img = $item->getElementsByTagNameNS('http://www.itunes.com/dtds/podcast-1.0.dtd', 'image');
// Set preemptive fallback, then set value if check passes
urlImage = '';
if ($img) {
$urlImage = $img->getAttribute('href');
}

Или поместите пространство имен в константу.

Возможно, вам удастся просто удалить префикс и получить все image теги любого пространства имен с getElementsByTagName,

Удостоверьтесь, чтобы проверить, есть ли у данного элемента itunes:image элемент вообще (пример приведен сейчас); в примере подкаста некоторые этого не делают, и я подозреваю, что это также доставляет вам неприятности. (Если нет href атрибутов, getAttribute вернется либо null или пустая строка в спецификации DOM без ошибок.)

*Если вам интересно, в этом месте нет реального DTD-файла, и не было уже около десяти лет.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]