Intereting Posts
Как удалить пространство в конце строки? Функция почты PHP не может отправлять электронную почту, когда я добавил .com.sg, а не только .com Приложение Facebook iframe после перенаправления авторизации на вкладку страницы facebook Опубликовать на странице через Facebook API Laravel: события Pusher не транслируются из прослушивателя событий eloquent Admin SDK, Directory API, Users: list – Какие-нибудь примеры PHP о том, как это сделать? Как найти тег объекта с параметром и вставить тег внутри HTML с помощью простого html DOM php Включить Captcha после нескольких попыток входа в систему – Как это реализовать? Установка display_errors = 0 и log_errors = 1 без php.ini Как удалить index.php из url в codeignitor? Tailing Log File и запись результатов в новый файл Отправка запроса POST с данными в PHP-скрипт с уровня c # Изменить версию openssl в MAMP Использование Zend_Auth для защиты всех контроллеров Получить значение массива по строке ключей

Вызов неопределенного метода 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() 

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

Solutions Collecting From Web of "Вызов неопределенного метода 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) { //... }