Отображение изображения в формате XML RSS в Stack Overflow

Я пытаюсь вытащить изображение URL из ссылки RSS.

Вот изображение одного из предметов внутри.

введите описание изображения здесь

На картинке есть тег media:thumbnail

Я использую это для названия, ссылки и описания:

$item_title = $item->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$item_link = $item->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$item_desc = $item->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;

Однако я не могу вытащить media:thumbnail,

Я пытался так же, как другой

$item_img = $item->getElementsByTagName('media:thumbnail')->item(0)->childNodes->item(0)->nodeValue;

Но это дает мне эту ошибку:
введите описание изображения здесь

Строка 24 — это строка, которую я пробовал. но я также пытался использовать .attribute(url) но это тоже ничего не возвращает.

Я надеюсь, что кто-то может помочь мне с этим, прошло 4 часа с тех пор, как у меня возникла эта проблема, но после долгих попыток и ошибок не было ни единого раза, когда я вернул URL.

Заранее спасибо, и счастливого кодирования.

1

Решение

media: часть элементов в вашем XML, называется префикс пространства имен и представляет URI пространства имен. Вы должны быть в состоянии найти этот URI как значение xmlns:media атрибут на одном из media: предки элемента. Если вы не можете найти это, вы сможете использовать значение URI xmlns атрибут на самом элементе (если применимо, который в данном случае является).

Чтобы извлечь определенные элементы из определенного пространства имен, вы должны использовать URI этого пространства имен и вызвать DOMDocument::getElementsByTagNameNS() вместо DOMDocument::getElementsByTagName(), вот так:

$item_img = $item->getElementsByTagNameNS('the namespace URI you found','thumbnail')
->item(0)
->childNodes
->item(0)->nodeValue;

Если вас не волнует, в каком пространстве имен определен конкретный элемент, вы можете просто продолжать использовать DOMDocument::getElementsByTagName(), но не указывайте префикс пространства имен:

$item_img = $item->getElementsByTagName('thumbnail')
->item(0)
->childNodes
->item(0)->nodeValue;

Имейте в виду, что это принесет все <thumbnail> элементы, независимо от того, в каком пространстве имен они находятся.

Однако в приведенном вами примере XML1, <media:thumbnail> Элемент не имеет дочерних узлов, поэтому приведенные выше примеры вашего кода, которые я настроил, все равно не будут выполнены.

И, наконец, .attribute(url) это просто неверный синтаксис. Так должно быть ->getAttribute('url'), конечно.

Итак, чтобы обернуть это, вы должны быть в состоянии получить url атрибут первого <thumbnail> конкретного пространства имен с:

$item_img = $item->getElementsByTagNameNS('the namespace URI you found','thumbnail')
->item(0)->getAttribute('url');

или же:

$item_img = $item->getElementsByTagName('thumbnail')
->item(0)->getAttribute('url');

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


1) Пожалуйста, в следующий раз опубликуйте действительный образец XML-кода вместо изображения.

1

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

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

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