Простой HTML DOM Parser - пропустить определенный элемент - PullRequest
1 голос
/ 08 апреля 2011

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

<code><div id=parent>

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

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

$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;
0 голосов
/ 16 марта 2014

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...