Я использую простой 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, хотя в нем упоминаются только основные функции, гораздо больше под капотом