Intereting Posts
PASSWORD_DEFAULT против PASSWORD_BCRYPT выполнить ссылку с помощью curl Вы используете Phing? Создайте механизм для передачи положительного целого числа и отобразите все значения серии Фибоначчи до и включите указанное значение Перекрыть родительскую функцию в заглушке я хочу получить общее количество пользователей заданных идентификаторов направления в таблице Депозит, основанный на проценте от общей суммы корзины Как установить переменные $ _SERVER при запуске тестов phpunit через Jenkins PHP – Умный способ защиты $ _GET vars от вредоносной инъекции PHP объединяет $ _POST в $ _SESSION php jquery, как механизм выбора исправление зависания curl_exec в Windows 8 apache Лучший способ защитить частный REST API без аутентификации пользователя для мобильного приложения Хорошие источники обучения для ООП-PHP, кто-нибудь? Выход короткого кода всегда отображается в верхней части настраиваемого шаблона

Поиск ссылок, соответствующих заданной строке в запросе xpath / domdocument

Возникают проблемы с получением ссылок, соответствующих заданному слову, с помощью Xpath и domDocument. Кажется, что все работает, где for($i=0;$i<$documentLinks->length;$i++){ используется.

Может ли кто-нибудь помочь с тем, где я ошибаюсь?

 $html = '<ol>'; $html .= ' <li id="stuff-123"> some copy here </li>'; $html .= ' <li id="stuff-456"> some copy here <a href="http://domain.com">domain</a> </li>'; $html .= ' <li id="stuff-789"> some copy here </li>'; $html .= '</ol>'; $dom = new DOMDocument(); $dom->loadHTML($html); $xpath = new DOMXPath($dom); $result = $xpath->query('//ol/li[starts-with(@id, "stuff")]'); foreach($result as $e){ $documentLinks = $e->getElementsByTagName('a')->item(0)->nodeValue; for($i=0;$i<$documentLinks->length;$i++){ $documentLink = $documentLinks->item($i); if(preg_match("/domain/i", $documentLink->getAttribute("href"))){ echo $documentLink->getAttribute("href") . "\n"; } } } 

Строка: $documentLinks = $e->getElementsByTagName('a')->item(0)->nodeValue;

должно быть: $documentLinks = $e->getElementsByTagName('a');


 $e->getElementsByTagName('a') 

возвращает всех детей $ e, чей тег <a ...> что означает, что

 $e->getElementsByTagName('a')->item(0); 

возвращает первую ссылку под $ e

и $documentLinks = $e->getElementsByTagName('a')->item(0)->nodeValue; возвращает текст этой первой ссылки.

http://php.net/manual/en/domdocument.getelementsbytagname.php

Вы можете получить атрибут href напрямую через XPath

 //ol/li[starts-with(@id, "stuff")]/a[contains(@href, "domain")]/@href 

а затем просто сделайте

 foreach($result as $href){ echo $href->nodeValue; } 

Обратите внимание, что функция contains регистр с учетом регистра.