Вызов неопределенного метода DOMDocument :: getElementsByClassName ()

Я пытаюсь получить тег alt из следующего тега img …

<div class="localImage"> <a href="/Electronic-Deals/b/ref=amb_link_185249707_2?ie=UTF8&amp;node=4192584031&amp;pf_rd_m=A1VBAL9TL5WCBF&amp;pf_rd_s=center-new-12&amp;pf_rd_r=07C4YQ4KZ15MZJQBT2PD&amp;pf_rd_t=701&amp;pf_rd_p=736512207&amp;pf_rd_i=20"> <img src="http://img.ruphp.com/php/cat-navs-electronics1._V335880105_.png" alt="Electronics" border="0" height="140" width="170"></a> </div> 

Для этого я пробовал следующий код …

 $dom = new DOMDocument(); @$dom->loadHTML($html2); foreach($dom->getElementsByClassName("localImage") as $tr) { $name = ''; foreach($tr->getElementsByTagName('img') as $i) { $name = $i->getAttribute('alt'); } echo $name; 

Но я получаю следующую ошибку …

 Call to undefined method DOMDocument::getElementsByClassName() 

Может кто-нибудь, пожалуйста, помогите мне, где я ошибаюсь … поскольку я пробовал этот шаблон кода раньше, но никогда раньше не сталкивался с такой проблемой.

Класс DOMDocument не содержит метод getElementsByClassName
Использовать xpath

 $xpath = new DOMXpath($dom); $xpath->query('//div[contains(@class, "localImage")]'); //instance of DOMNodeList 

Этот метод не поддерживается PHP DOMDocument. Он может быть эмулирован Xpath. Любой селектор CSS3, который не возвращает псевдоэлементы, может быть преобразован в выражение Xpath.

Поэтому, чтобы соответствовать атрибуту класса CSS, вы должны понимать, как он работает. Класс CSS является атрибутом токена. Он содержит несколько имен классов, разделенных пробелами. В Xpath здесь есть метод, который может нормализовать пробелы в одиночные пробелы. Если использовать атрибут класса и добавить пробел к фронту и обратно, любой токен будет соответствовать шаблону {space}ClassOne{space} . С несколькими токенами вы получите что-то вроде {space}ClassOne{space}ClassTwo{space}ClassThree{space} . Часть импорта, которая содержит Class но не {space}Class{space} .

Селектор CSS .className может быть преобразован в выражение .//*[contains(concat(" ", normalize-space(@class), " "), " className ")] . Первая часть нормализует атрибут так, чтобы он соответствовал токену, а не только строке, которая могла бы быть частью имени маркера.

В вашем случае вы можете уточнить, что для соответствия элементам div :

.//div[contains(concat(" ", normalize-space(@class), " "), " localImage ")]

Чтобы использовать Xpath, вам нужно создать экземпляр DOMXpath для документа.

 $document = new DOMDocument(); $document->loadHTML($html2); $xpath = new DOMXpath($document); $expression = './/div[contains(concat(" ", normalize-space(@class), " "), " localImage ")]'; foreach ($xpath->evaluate($expression) as $div) { //... }