Intereting Posts
Вставка json-кодированных данных в mysql Переименуйте загруженный файл с помощью PHP, но сохраните расширение почему база данных mysql деактивирована в статусе xampp, но зеленая на панели управления панели управления xampp? не может получить НЕКОТОРЫЕ переменные сеанса на разных страницах PHP Stripe получает идентификатор транзакции после успешной покупки Как отправить URL-адреса на php-сервер и вернуть ответ на андроид Отправка данных POST на Android Карты Google – панорамирование и масштабирование по областям – маркеры не появляются при увеличении или панорамировании – ПОМОЩЬ! Заказывать записи запросов SQL по частоте Как получить модульный тест для входа в приложение Zend с помощью PHPUnit Xdebug для удаленного сервера, не подключающегося пакет для обнаружения пользователей в php? Правила тегов и атрибутов DOM и фильтрация nginx: 502 Bad Gateway с curl / https на Mac OS X Должен ли я использовать mysqli_real_escape_string или использовать подготовленные инструкции?

Простой HTML DOM Parser – пропустить определенный элемент

Я использую простой HTML DOM Parser, и я хочу полностью игнорировать содержимое «вложенного» элемента и получать содержимое существующего элемента «pre».

<div id=parent> <div class="nested"> <pre>Text that I want ignored</pre> </div> <pre> This is the text I want to access </pre> </div> 

Я не контролирую источник HTML, а владелец недавно добавил «вложенный» элемент. Прежде чем я получил доступ к содержимому, которое мне было необходимо,

 $page_contents = file_get_html($url); $div_content = $page_contents->find('div[id=parent]pre', 0)->innertext; 

Но, очевидно, новый вложенный элемент нарушил мой метод.

Кажется, я не могу найти официальную документацию по этому сценарию.

не проверен, но попробуйте это

 $div_content = $page_contents->find('div[id=parent][class!=nested]pre', 0)->innertext; 

или

 $div_content = $page_contents->find('div[id=parent class!=nested]pre', 0)->innertext; 

или, может быть, даже это я думаю, что это действительно тот, но я еще не проверял

 $div_content = $page_contents->find('div[class!=nested]pre', 1)->innertext; 

все еще не знаю, будет ли это работать, но попробуйте это

 $div_content = $page_contents->find('div[class!=nested pre]', 0)->innertext; 

или

 $div_content = $page_contents->find('div[class!=nested pre]', 0)->plaintext; 

find('div[id=parent] pre') находит все pre теги в указанном div и не заботится, если один из них заключен в другой div , поэтому есть несколько предложений:

если вы точно знаете, до чего вы хотите получить, просто укажите число с нуля, в вашем случае:

 $div_content = $page_contents->find('div[id=parent] pre', 1)->innertext; 

в случае, если вы не знаете, сколько из них существует, или не знаете порядок, вы можете просто удалить тот, который вам не нужен, а затем сделать предыдущую строку, но на этот раз указав номер 0:

 $page_contents->find('div[id=parent] div[id=nested] pre', 0)->outertext = ''; $div_content = $page_contents->find('div[id=parent] pre', 0)->innertext; 

и в случае, если вы не хотите изменять $page_contents , просто назначьте родительский div временной переменной и выполните следующие действия:

 $temp = $page_contents->find('div[id=parent]', 0); $temp->find('div[id=nested] pre', 0)->outertext=''; $div_content = $temp->find('pre', 0)->innertext; 

Конечно, есть много других способов сделать это, следует прочитать руководство http://simplehtmldom.sourceforge.net/manual.htm, хотя в нем упоминаются только основные функции, гораздо больше под капотом