2014-10-06 3 views
2

Я получаю xml, используя функцию file_get_contents, а затем создаю с ним SimpleXMLElement.PHP: получение значения элемента XML по атрибуту

XML-файл можно увидеть здесь: http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=Nirvana&api_key=0ca5b0824b7973303c361510e7dbfced

Проблема заключается в том, что мне нужно, чтобы получить значение lfm->> образ художника-[@ размер = «маленький»], и я не могу найти, как сделать это.

+0

Это, кажется, движется в вашем направлении : http://stackoverflow.com/questions/6837479/php-and-xml-looping-through-an-xml-file-with-php –

ответ

1

Вы должны использовать DOMXPath для этого: http://php.net/manual/en/class.domxpath.php

Этот XPath запрос будет работать для XML:

\\lfm\artist\image[@size='small']

Как следует:

$doc = new DOMDocument(); 
$doc->loadXML($url); 

$xpath = new DOMXpath($doc); 

$elements = $xpath->query("\\lfm\artist\image[@size='small']"); 


if (!is_null($elements)) { 
    foreach ($elements as $element) { 
    echo "<br/>[". $element->nodeName. "]"; 

    $nodes = $element->childNodes; 
    foreach ($nodes as $node) { 
     echo $node->nodeValue. "\n"; 
    } 
    } 
} 
+0

XPath также доступен le из объекта SimpleXMLElement с помощью функции 'xpath()'. См. Http://php.net/manual/en/simplexmlelement.xpath.php, и да, таким образом, это выглядит как самый простой. –

+0

Что я делаю неправильно? $ requestXML = file_get_contents ('http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&api_key=0ca5b0824b7973303c361510e7dbfced&artist=$artist'); $ doc = новый DOMDocument(); $ doc-> loadXML ($ requestXML); $ xpath = новый DOMXpath ($ doc); echo $ xpath-> query ("\\ lfm \ artist \ image [@ size = 'small']"); – ColdFox

+0

Исключить строки 'file_get_contents' и' loadXML' в целом. Вместо этого используйте loadHTMLFile() и передайте URL-адрес XML. См. Редактирование. – AnchovyLegend

Смежные вопросы