Я пытаюсь вытащить изображение 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.
Заранее спасибо, и счастливого кодирования.
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-кода вместо изображения.
Других решений пока нет …