Анализ xml с помощью simplexml_load

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

Мой xml:

<entry> <title>The Title</title> <id>http://example.com/post/367327.html</id> <summary>Some extra text</summary> <link rel="enclosure" href="http://example.com/photos/f_0px_30px/image687.jpg" type="image/jpeg" length="" /> </entry> 

До сих пор я использую следующий код для получения других данных:

 $url = "http://msdssite.com/feeds/xml/myxml.xml"; $xml = simplexml_load_file($url); foreach($xml->entry as $PRODUCT) { $my_title = trim($PRODUCT->title); $url = trim($PRODUCT->id); $myimg = $PRODUCT->link; } 

Как я могу проанализировать href из этого: <link rel="enclosure" href="http://example.com/photos/f_0px_30px/image687.jpg" type="image/jpeg" length="" />

Поскольку кажется, что ваши записи могут содержать несколько тегов link , вам нужно убедиться, что атрибут type имеет значение image/jpeg , чтобы получить ссылку на изображение:

 ini_set("display_errors", "On"); $feedURL = 'http://OLDpost.gr/feeds/xml/category-takhs-xatzhs.xml'; $feed = simplexml_load_file($feedURL); $results = array(); foreach($feed->entry as $entry) { $result = array('title' => (string)$entry->title, 'url' => (string)$entry->id); $links = $entry->link; foreach ($links as $link) { $linkAttr = $link->attributes(); if (isset($linkAttr['type']) && $linkAttr['type']=='image/jpeg') { $result['img'] = (string)$linkAttr['href']; break; } } $results[] = $result; } print_r($results); 

Обратите внимание, что использование simplexml, подобного этому (цикл foreach, чтобы найти хороший тег ссылки) не очень удобно. Лучше использовать запрос XPath:

 foreach($feed->entry as $entry) { $entry->registerXPathNamespace('e', 'http://www.w3.org/2005/Atom'); $results[] = array( 'title' => (string)$entry->title, 'url' => (string)$entry->id, 'img' => (string)$entry->xpath('e:link[@type="image/jpeg"]/@href')[0][0] ); } 

Если это точный XML, на самом деле нет необходимости в foreach. Попробуй это:

 $xml = simplexml_load_file($url); $my_title = (string) $xml->title; $myimg = (string) $xml->link->attributes()['href']; // 5.4 or above echo $myimg; // http://example.com/photos/f_0px_30px/image687.jpg 

Пытаться:

 foreach($xml->entry as $PRODUCT) { $my_title = trim($PRODUCT->title[0]); $url = trim($PRODUCT->id[0]); $myimg = $PRODUCT->link[0]; }